diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..f9bacd2 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,61 @@ +name: Build and Package + +on: + push: + branches: [master, main] + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up Rust + uses: dtolnay/rust-toolchain@stable + + - name: Set up Node + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + cache-dependency-path: client/package-lock.json + + - name: Cache Rust dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + server/target + key: ${{ runner.os }}-cargo-${{ hashFiles('server/Cargo.lock') }} + + - name: Test server + run: cargo test --manifest-path server/Cargo.toml --release + + - name: Build server (release) + run: cargo build --release --manifest-path server/Cargo.toml + + - name: Stage server binary + run: | + mkdir -p server/bin + cp server/target/release/urdf-lsp server/bin/urdf-lsp + chmod +x server/bin/urdf-lsp + + - name: Install client dependencies + run: npm --prefix client ci + + - name: Build client + run: npm run build:client + + - name: Package extension + run: | + npm install -g @vscode/vsce + vsce package --no-dependencies --out urdf-$(node -p "require('./package.json').version")-linux-x64.vsix + + - name: Upload .vsix artifact + uses: actions/upload-artifact@v4 + with: + name: urdf-extension + path: '*.vsix' + retention-days: 30 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..0f6641c --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,109 @@ +name: Release + +on: + push: + tags: + - 'v*.*.*' + +jobs: + build: + name: Build ${{ matrix.label }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + label: linux-x64 + rust-targets: x86_64-unknown-linux-gnu + vsce-targets: linux-x64 + - os: macos-latest + label: darwin-universal + rust-targets: x86_64-apple-darwin aarch64-apple-darwin + vsce-targets: darwin-x64 darwin-arm64 + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + + - name: Set up Rust + uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.rust-targets }} + + - name: Set up Node + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + cache-dependency-path: client/package-lock.json + + - name: Cache Rust dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + server/target + key: ${{ runner.os }}-${{ matrix.label }}-cargo-${{ hashFiles('server/Cargo.lock') }} + + - name: Test server + if: matrix.label == 'linux-x64' + run: cargo test --manifest-path server/Cargo.toml --release + + - name: Build server (release) for each Rust target + run: | + for t in ${{ matrix.rust-targets }}; do + cargo build --release --manifest-path server/Cargo.toml --target "$t" + done + + - name: Stage server binary + run: | + mkdir -p server/bin + targets=(${{ matrix.rust-targets }}) + if [ ${#targets[@]} -eq 1 ]; then + cp "server/target/${targets[0]}/release/urdf-lsp" server/bin/urdf-lsp + else + lipo -create -output server/bin/urdf-lsp \ + server/target/x86_64-apple-darwin/release/urdf-lsp \ + server/target/aarch64-apple-darwin/release/urdf-lsp + fi + chmod +x server/bin/urdf-lsp + + - name: Install client dependencies + run: npm --prefix client ci + + - name: Build client + run: npm run build:client + + - name: Package extension(s) + run: | + npm install -g @vscode/vsce + for t in ${{ matrix.vsce-targets }}; do + vsce package --no-dependencies --target "$t" --out "urdf-$t.vsix" + done + + - name: Upload .vsix + uses: actions/upload-artifact@v4 + with: + name: vsix-${{ matrix.label }} + path: urdf-*.vsix + retention-days: 7 + + release: + name: Create GitHub Release + needs: build + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Download .vsix artifacts + uses: actions/download-artifact@v4 + with: + pattern: vsix-* + merge-multiple: true + + - name: Create release + uses: softprops/action-gh-release@v2 + with: + files: '*.vsix' + fail_on_unmatched_files: true + generate_release_notes: true diff --git a/.gitignore b/.gitignore index 8c8220a..997087c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ out node_modules .vscode-test/ -.vsix +server/target/ +server/bin/ +client/out/ +*.vsix diff --git a/.vscode/launch.json b/.vscode/launch.json index 759cf25..07a3847 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,28 +1,19 @@ -// A launch configuration that compiles the extension and then opens it inside a new window { - "version": "0.1.0", + "version": "0.2.0", "configurations": [ { - "name": "Extension", + "name": "Run Extension", "type": "extensionHost", "request": "launch", "runtimeExecutable": "${execPath}", - "args": ["--extensionDevelopmentPath=${workspaceRoot}" ], - "stopOnEntry": false, + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ], "sourceMaps": true, - "outFiles": [ "${workspaceRoot}/out/**/*.js" ], - "preLaunchTask": "npm: watch" - }, - { - "name": "Extension Tests", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": ["--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test" ], - "stopOnEntry": false, - "sourceMaps": true, - "outFiles": [ "${workspaceRoot}/out/test/**/*.js" ], - "preLaunchTask": "npm: watch" + "outFiles": [ + "${workspaceFolder}/client/out/**/*.js" + ], + "preLaunchTask": "build" } ] } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 604e38f..2d45642 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,20 +1,36 @@ -// See https://go.microsoft.com/fwlink/?LinkId=733558 -// for the documentation about the tasks.json format { "version": "2.0.0", "tasks": [ { - "type": "npm", - "script": "watch", - "problemMatcher": "$tsc-watch", - "isBackground": true, - "presentation": { - "reveal": "never" + "label": "build", + "type": "shell", + "command": "npm run build", + "options": { + "cwd": "${workspaceFolder}" }, + "problemMatcher": ["$tsc", "$rustc"], "group": { "kind": "build", "isDefault": true } + }, + { + "label": "build:server", + "type": "shell", + "command": "cargo build", + "options": { + "cwd": "${workspaceFolder}/server" + }, + "problemMatcher": ["$rustc"] + }, + { + "label": "build:client", + "type": "shell", + "command": "npm run compile", + "options": { + "cwd": "${workspaceFolder}/client" + }, + "problemMatcher": ["$tsc"] } ] -} \ No newline at end of file +} diff --git a/.vscodeignore b/.vscodeignore index ea75c67..d427d9d 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -1,8 +1,23 @@ .vscode/** .vscode-test/** -out/test/** -out/**/*.map -src/** +*.vsix +client/out/**/*.map +client/src/** +client/tsconfig.json +client/node_modules/** +client/package.json +client/package-lock.json +server/src/** +server/target/** +server/Cargo.toml +server/Cargo.lock +.github/** .gitignore -tsconfig.json vsc-extension-quickstart.md +examples/** +.claude/** +build/** +install/** +log/** +**/COLCON_IGNORE +**/.built_by diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ccf67e..56ada38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,35 @@ All notable changes to the "urdf" extension will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## [0.5.2] - 2026-05-22 + +### Added +- **Joint type dropdown**: typing `type="` inside a `` element now shows a completion dropdown with all 6 valid URDF joint types (`revolute`, `continuous`, `prismatic`, `fixed`, `floating`, `planar`). +- **Workspace cross-file analysis**: links, joints, and xacro properties defined in other open or workspace-scanned files no longer produce false-positive diagnostics. On startup the server scans all `.urdf`/`.xacro` files in the workspace; files opened later update the index incrementally. Cross-file references in `.xacro` fragment files are suppressed entirely when the entity is found in the workspace. + +## [0.5.1] - 2026-05-22 + +### Fixed +- Tag-mismatch diagnostic now points at the unexpected closing tag (where the problem is), not the last open element on the stack. +- Undefined xacro properties inside complex `${...}` expressions (e.g. `${(1/12)*mass*(width*typo_var)}`) are now flagged; previously only single-identifier expressions like `${typo_var}` were checked. + +## [0.5.0] - 2026-05-22 + +First marketplace release. + +- Published to VS Code Marketplace and Open VSX under publisher `Roy-Pichifkes`. +- Platform-specific .vsix per target: `linux-x64`, `darwin-x64`, `darwin-arm64`. The two Darwin .vsix files share one lipo'd universal binary built on a single Apple Silicon CI runner. +- Native server binary bundled inside each .vsix; no Rust toolchain required for end users. + ## [Unreleased] +### 0.4.0-dev + +- Reworked from a snippets-only extension into a full language extension. +- Added Rust-based language server (`urdf-lsp`, built with `tower-lsp`) and a thin TypeScript client. +- Registered `urdf` as a first-class language id (no longer aliased to `xml`); kept `.urdf` and `.xacro` file associations. +- Linux x86_64 only for now. + ## [0.0.1] - Initial release \ No newline at end of file diff --git a/README.md b/README.md index 79c64d3..04477b2 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,117 @@ -# urdf README +# URDF / xacro for VS Code -[URDF](http://wiki.ros.org/urdf) support for VSCode. +Language server for [URDF](http://wiki.ros.org/urdf) and [xacro](http://wiki.ros.org/xacro) robot description files, providing diagnostics, completions, hover, go-to-definition, refactoring, inlay hints, quick-fixes, color picking, and folding. +Forked from [OTL/vscode-urdf](https://github.com/OTL/vscode-urdf) (which provided XML highlighting and snippets) and rebuilt around a Rust LSP server. + +> **Platforms:** Linux x64, macOS x64 (Intel), macOS arm64 (Apple Silicon). ## Features -* Associates .urdf/.xacro files with xml format. -* Some snippets +### Diagnostics + +- **XML parse errors** — positioned at the actual misspelled token, not the closing tag or top of file. +- **Mismatched / unclosed XML tags** — the error lands on the opening tag, not where the parser noticed. +- **Undefined link / joint references** — in ``, ``, ``, and ``. +- **Duplicate link / joint names**. +- **Self-referential joints** (parent == child). +- **Kinematic tree validation** — flags isolated links, multiple roots, and cycles. +- **Undefined xacro `${…}` properties** — math expressions like `${pi/2}` and `${chassis_length/2}` are recognised and not flagged. +- **Unclosed `${…}` expressions** — `radius="${asaso"` is caught at the right place. +- **URDF schema** — unknown elements, unknown attributes, missing required attributes, attribute value type checks (xyz/rpy = 3 floats, rgba = 4 floats in [0,1], etc.). +- **Gazebo schema** — `` validated against known links/joints; child properties (`mu1`, `mu2`, `kp`, `kd`, `selfCollide`, `maxVel`, etc.) type-checked. + +In `.xacro` files, undefined-reference errors are demoted to warnings since the symbol may come from an included file. -![snippets](img/snippets.gif) +### IDE features + +- **Hover** — type, range, and details for links, joints, and xacro properties. +- **Go to Definition** (F12) — jump from `link="…"` / `joint="…"` to the corresponding `` / ``. +- **Find All References** (Shift+F12). +- **Rename Symbol** (F2) — atomically renames the definition and every reference. +- **Document Symbols** — outline view of links, joints, materials, xacro properties. +- **Completion** — link/joint names inside `link=` / `joint=` / `reference=`, xacro property names after `${`, Gazebo property element names inside ``. +- **Inlay hints** — shows the evaluated value of every `${…}` (`${chassis_length/2}` → `0.1675`). Math evaluator supports `+ - * / %`, parentheses, `pi`, `sin/cos/tan/abs/sqrt/radians/degrees`, and recursive variable resolution. +- **Quick-fixes** (lightbulb / Ctrl+.) — typo corrections for undefined refs (`base_lin` → `base_link`), insert missing required attributes. +- **Folding ranges** — fold any multi-line ``, ``, ``, ``, ``, ``, plugin, etc. +- **Color decorators** — colored swatches next to ``; click to open VS Code's color picker. +- **Enhanced syntax highlighting** — distinct theme colors for URDF containers, structure tags, geometry primitives, material elements, inertial elements, Gazebo physics properties, and xacro elements. ## Requirements -* xml +Linux x64, macOS x64, or macOS arm64. The .vsix bundles a pre-built native language server, so end users do **not** need a Rust toolchain or ROS installation — only VS Code. + +## Installation + +From the VS Code Marketplace: + +```sh +code --install-extension Roy-Pichifkes.urdf +``` + +Or from Open VSX (VSCodium / Cursor / code-server): + +```sh +codium --install-extension Roy-Pichifkes.urdf +``` + +Or sideload a `.vsix` from the [GitHub Releases](https://github.com/pichifkes/vscode-urdf/releases) page: + +```sh +code --install-extension urdf-*.vsix +``` + +## Building from source + +Requires a Rust toolchain (stable) and Node 18+. + +```sh +git clone https://github.com/pichifkes/vscode-urdf.git +cd vscode-urdf +npm --prefix client install +npm --prefix client run compile +cargo build --release --manifest-path server/Cargo.toml +mkdir -p server/bin && cp server/target/release/urdf-lsp server/bin/ +npx @vscode/vsce package --no-dependencies +code --install-extension urdf-*.vsix +``` + +## Development + +```sh +# Build everything +npm run build + +# F5 inside VS Code → opens an Extension Development Host with the +# extension loaded; the preLaunchTask rebuilds client and server. +``` + +Run the server's tests: + +```sh +cd server && cargo test +``` + +## Architecture + +- `client/` — TypeScript thin client that spawns the Rust binary over stdio (`vscode-languageclient`). +- `server/` — Rust LSP server using `tower-lsp` + `roxmltree`. + - `document.rs` — XML parsing, tag-balance fallback scanner, model of links/joints/materials/xacro properties/gazebo refs. + - `diagnostics.rs` — semantic checks and schema validation. + - `features.rs` — hover, definition, completion, references, rename, document symbols, inlay hints, code actions, folding ranges, document colors. + - `xacro_eval.rs` — recursive-descent expression evaluator for `${…}` substitution. +- `syntaxes/urdf.tmLanguage.json` — TextMate grammar with per-category tag scopes. +- `language-configuration.json` — bracket pairs, auto-closing for `${`. -## Extension Settings +## Credits -there are no settings now. +Original snippets and XML-highlighting extension by: +- Olcina +- Fabio Capasso +- Trimple -## Contributors +LSP rewrite, diagnostics, and IDE features added afterwards. -Thank you! +## License -* Olcina -* Fabio Capasso -* Trimple +MIT. diff --git a/build/.built_by b/build/.built_by new file mode 100644 index 0000000..06e74ac --- /dev/null +++ b/build/.built_by @@ -0,0 +1 @@ +colcon diff --git a/build/COLCON_IGNORE b/build/COLCON_IGNORE new file mode 100644 index 0000000..e69de29 diff --git a/client/package-lock.json b/client/package-lock.json new file mode 100644 index 0000000..b6026d0 --- /dev/null +++ b/client/package-lock.json @@ -0,0 +1,603 @@ +{ + "name": "urdf-client", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "urdf-client", + "version": "0.0.1", + "dependencies": { + "vscode-languageclient": "^9.0.1" + }, + "devDependencies": { + "@types/node": "^20.11.0", + "@types/vscode": "^1.82.0", + "esbuild": "^0.24.0", + "typescript": "^5.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@types/node": { + "version": "20.19.41", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.41.tgz", + "integrity": "sha512-ECymXOukMnOoVkC2bb1Vc/w/836DXncOg5m8Xj1RH7xSHZJWNYY6Zh7EH477vcnD5egKNNfy2RpNOmuChhFPgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/vscode": { + "version": "1.120.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.120.0.tgz", + "integrity": "sha512-feaT4Rst+FkTch5zz/ZbNCxoIvo55YU80Be2kiL7OJcod4+CUYf2lUBPdIJzozNnSEMq1VRTGrWEcCGFB3fBmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/esbuild": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" + } + }, + "node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageclient": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-9.0.1.tgz", + "integrity": "sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==", + "license": "MIT", + "dependencies": { + "minimatch": "^5.1.0", + "semver": "^7.3.7", + "vscode-languageserver-protocol": "3.17.5" + }, + "engines": { + "vscode": "^1.82.0" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "license": "MIT", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "license": "MIT" + } + } +} diff --git a/client/package.json b/client/package.json new file mode 100644 index 0000000..e245d49 --- /dev/null +++ b/client/package.json @@ -0,0 +1,21 @@ +{ + "name": "urdf-client", + "version": "0.0.1", + "private": true, + "description": "VS Code thin client for the urdf-lsp server", + "main": "out/extension.js", + "scripts": { + "typecheck": "tsc -p . --noEmit", + "bundle": "esbuild src/extension.ts --bundle --platform=node --target=node18 --external:vscode --format=cjs --outfile=out/extension.js --sourcemap", + "compile": "npm run typecheck && npm run bundle" + }, + "dependencies": { + "vscode-languageclient": "^9.0.1" + }, + "devDependencies": { + "@types/node": "^20.11.0", + "@types/vscode": "^1.82.0", + "esbuild": "^0.24.0", + "typescript": "^5.4.0" + } +} diff --git a/client/src/extension.ts b/client/src/extension.ts new file mode 100644 index 0000000..48484d9 --- /dev/null +++ b/client/src/extension.ts @@ -0,0 +1,65 @@ +import * as fs from 'fs'; +import * as path from 'path'; +import { ExtensionContext, workspace, window } from 'vscode'; +import { + LanguageClient, + LanguageClientOptions, + ServerOptions, + TransportKind, +} from 'vscode-languageclient/node'; + +let client: LanguageClient | undefined; + +function resolveServerBinary(context: ExtensionContext): string | undefined { + const override = process.env.URDF_LSP_BIN; + if (override) { + return fs.existsSync(override) ? override : undefined; + } + const release = context.asAbsolutePath(path.join('server', 'bin', 'urdf-lsp')); + if (fs.existsSync(release)) return release; + const debug = context.asAbsolutePath(path.join('server', 'target', 'debug', 'urdf-lsp')); + if (fs.existsSync(debug)) return debug; + return undefined; +} + +export async function activate(context: ExtensionContext): Promise { + const serverBinary = resolveServerBinary(context); + if (!serverBinary) { + window.showErrorMessage( + 'urdf-lsp: server binary not found. Set URDF_LSP_BIN, or build the server ' + + 'with `cargo build --release --manifest-path server/Cargo.toml` and stage ' + + 'it at server/bin/urdf-lsp.', + ); + return; + } + + const serverOptions: ServerOptions = { + command: serverBinary, + args: [], + transport: TransportKind.stdio, + }; + + const clientOptions: LanguageClientOptions = { + documentSelector: [{ scheme: 'file', language: 'urdf' }], + synchronize: { + fileEvents: workspace.createFileSystemWatcher('**/*.{urdf,xacro}'), + }, + }; + + const lc = new LanguageClient('urdfLsp', 'URDF Language Server', serverOptions, clientOptions); + context.subscriptions.push(lc); + client = lc; + + try { + await lc.start(); + } catch (err) { + client = undefined; + window.showErrorMessage( + `Failed to start urdf-lsp at ${serverBinary}: ${err instanceof Error ? err.message : String(err)}`, + ); + } +} + +export function deactivate(): Thenable | undefined { + return client?.stop(); +} diff --git a/client/tsconfig.json b/client/tsconfig.json new file mode 100644 index 0000000..e978f97 --- /dev/null +++ b/client/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "ES2022", + "outDir": "out", + "lib": ["ES2022"], + "sourceMap": true, + "rootDir": "src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true + }, + "include": ["src"] +} diff --git a/examples/sample.urdf b/examples/sample.urdf new file mode 100644 index 0000000..ba43863 --- /dev/null +++ b/examples/sample.urdf @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/install/.colcon_install_layout b/install/.colcon_install_layout new file mode 100644 index 0000000..3aad533 --- /dev/null +++ b/install/.colcon_install_layout @@ -0,0 +1 @@ +isolated diff --git a/install/COLCON_IGNORE b/install/COLCON_IGNORE new file mode 100644 index 0000000..e69de29 diff --git a/install/_local_setup_util_ps1.py b/install/_local_setup_util_ps1.py new file mode 100644 index 0000000..3c6d9e8 --- /dev/null +++ b/install/_local_setup_util_ps1.py @@ -0,0 +1,407 @@ +# Copyright 2016-2019 Dirk Thomas +# Licensed under the Apache License, Version 2.0 + +import argparse +from collections import OrderedDict +import os +from pathlib import Path +import sys + + +FORMAT_STR_COMMENT_LINE = '# {comment}' +FORMAT_STR_SET_ENV_VAR = 'Set-Item -Path "Env:{name}" -Value "{value}"' +FORMAT_STR_USE_ENV_VAR = '$env:{name}' +FORMAT_STR_INVOKE_SCRIPT = '_colcon_prefix_powershell_source_script "{script_path}"' # noqa: E501 +FORMAT_STR_REMOVE_LEADING_SEPARATOR = '' # noqa: E501 +FORMAT_STR_REMOVE_TRAILING_SEPARATOR = '' # noqa: E501 + +DSV_TYPE_APPEND_NON_DUPLICATE = 'append-non-duplicate' +DSV_TYPE_PREPEND_NON_DUPLICATE = 'prepend-non-duplicate' +DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS = 'prepend-non-duplicate-if-exists' +DSV_TYPE_SET = 'set' +DSV_TYPE_SET_IF_UNSET = 'set-if-unset' +DSV_TYPE_SOURCE = 'source' + + +def main(argv=sys.argv[1:]): # noqa: D103 + parser = argparse.ArgumentParser( + description='Output shell commands for the packages in topological ' + 'order') + parser.add_argument( + 'primary_extension', + help='The file extension of the primary shell') + parser.add_argument( + 'additional_extension', nargs='?', + help='The additional file extension to be considered') + parser.add_argument( + '--merged-install', action='store_true', + help='All install prefixes are merged into a single location') + args = parser.parse_args(argv) + + packages = get_packages(Path(__file__).parent, args.merged_install) + + ordered_packages = order_packages(packages) + for pkg_name in ordered_packages: + if _include_comments(): + print( + FORMAT_STR_COMMENT_LINE.format_map( + {'comment': 'Package: ' + pkg_name})) + prefix = os.path.abspath(os.path.dirname(__file__)) + if not args.merged_install: + prefix = os.path.join(prefix, pkg_name) + for line in get_commands( + pkg_name, prefix, args.primary_extension, + args.additional_extension + ): + print(line) + + for line in _remove_ending_separators(): + print(line) + + +def get_packages(prefix_path, merged_install): + """ + Find packages based on colcon-specific files created during installation. + + :param Path prefix_path: The install prefix path of all packages + :param bool merged_install: The flag if the packages are all installed + directly in the prefix or if each package is installed in a subdirectory + named after the package + :returns: A mapping from the package name to the set of runtime + dependencies + :rtype: dict + """ + packages = {} + # since importing colcon_core isn't feasible here the following constant + # must match colcon_core.location.get_relative_package_index_path() + subdirectory = 'share/colcon-core/packages' + if merged_install: + # return if workspace is empty + if not (prefix_path / subdirectory).is_dir(): + return packages + # find all files in the subdirectory + for p in (prefix_path / subdirectory).iterdir(): + if not p.is_file(): + continue + if p.name.startswith('.'): + continue + add_package_runtime_dependencies(p, packages) + else: + # for each subdirectory look for the package specific file + for p in prefix_path.iterdir(): + if not p.is_dir(): + continue + if p.name.startswith('.'): + continue + p = p / subdirectory / p.name + if p.is_file(): + add_package_runtime_dependencies(p, packages) + + # remove unknown dependencies + pkg_names = set(packages.keys()) + for k in packages.keys(): + packages[k] = {d for d in packages[k] if d in pkg_names} + + return packages + + +def add_package_runtime_dependencies(path, packages): + """ + Check the path and if it exists extract the packages runtime dependencies. + + :param Path path: The resource file containing the runtime dependencies + :param dict packages: A mapping from package names to the sets of runtime + dependencies to add to + """ + content = path.read_text() + dependencies = set(content.split(os.pathsep) if content else []) + packages[path.name] = dependencies + + +def order_packages(packages): + """ + Order packages topologically. + + :param dict packages: A mapping from package name to the set of runtime + dependencies + :returns: The package names + :rtype: list + """ + # select packages with no dependencies in alphabetical order + to_be_ordered = list(packages.keys()) + ordered = [] + while to_be_ordered: + pkg_names_without_deps = [ + name for name in to_be_ordered if not packages[name]] + if not pkg_names_without_deps: + reduce_cycle_set(packages) + raise RuntimeError( + 'Circular dependency between: ' + ', '.join(sorted(packages))) + pkg_names_without_deps.sort() + pkg_name = pkg_names_without_deps[0] + to_be_ordered.remove(pkg_name) + ordered.append(pkg_name) + # remove item from dependency lists + for k in list(packages.keys()): + if pkg_name in packages[k]: + packages[k].remove(pkg_name) + return ordered + + +def reduce_cycle_set(packages): + """ + Reduce the set of packages to the ones part of the circular dependency. + + :param dict packages: A mapping from package name to the set of runtime + dependencies which is modified in place + """ + last_depended = None + while len(packages) > 0: + # get all remaining dependencies + depended = set() + for pkg_name, dependencies in packages.items(): + depended = depended.union(dependencies) + # remove all packages which are not dependent on + for name in list(packages.keys()): + if name not in depended: + del packages[name] + if last_depended: + # if remaining packages haven't changed return them + if last_depended == depended: + return packages.keys() + # otherwise reduce again + last_depended = depended + + +def _include_comments(): + # skipping comment lines when COLCON_TRACE is not set speeds up the + # processing especially on Windows + return bool(os.environ.get('COLCON_TRACE')) + + +def get_commands(pkg_name, prefix, primary_extension, additional_extension): + commands = [] + package_dsv_path = os.path.join(prefix, 'share', pkg_name, 'package.dsv') + if os.path.exists(package_dsv_path): + commands += process_dsv_file( + package_dsv_path, prefix, primary_extension, additional_extension) + return commands + + +def process_dsv_file( + dsv_path, prefix, primary_extension=None, additional_extension=None +): + commands = [] + if _include_comments(): + commands.append(FORMAT_STR_COMMENT_LINE.format_map({'comment': dsv_path})) + with open(dsv_path, 'r') as h: + content = h.read() + lines = content.splitlines() + + basenames = OrderedDict() + for i, line in enumerate(lines): + # skip over empty or whitespace-only lines + if not line.strip(): + continue + # skip over comments + if line.startswith('#'): + continue + try: + type_, remainder = line.split(';', 1) + except ValueError: + raise RuntimeError( + "Line %d in '%s' doesn't contain a semicolon separating the " + 'type from the arguments' % (i + 1, dsv_path)) + if type_ != DSV_TYPE_SOURCE: + # handle non-source lines + try: + commands += handle_dsv_types_except_source( + type_, remainder, prefix) + except RuntimeError as e: + raise RuntimeError( + "Line %d in '%s' %s" % (i + 1, dsv_path, e)) from e + else: + # group remaining source lines by basename + path_without_ext, ext = os.path.splitext(remainder) + if path_without_ext not in basenames: + basenames[path_without_ext] = set() + assert ext.startswith('.') + ext = ext[1:] + if ext in (primary_extension, additional_extension): + basenames[path_without_ext].add(ext) + + # add the dsv extension to each basename if the file exists + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if os.path.exists(basename + '.dsv'): + extensions.add('dsv') + + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if 'dsv' in extensions: + # process dsv files recursively + commands += process_dsv_file( + basename + '.dsv', prefix, primary_extension=primary_extension, + additional_extension=additional_extension) + elif primary_extension in extensions and len(extensions) == 1: + # source primary-only files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + primary_extension})] + elif additional_extension in extensions: + # source non-primary files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + additional_extension})] + + return commands + + +def handle_dsv_types_except_source(type_, remainder, prefix): + commands = [] + if type_ in (DSV_TYPE_SET, DSV_TYPE_SET_IF_UNSET): + try: + env_name, value = remainder.split(';', 1) + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the value') + try_prefixed_value = os.path.join(prefix, value) if value else prefix + if os.path.exists(try_prefixed_value): + value = try_prefixed_value + if type_ == DSV_TYPE_SET: + commands += _set(env_name, value) + elif type_ == DSV_TYPE_SET_IF_UNSET: + commands += _set_if_unset(env_name, value) + else: + assert False + elif type_ in ( + DSV_TYPE_APPEND_NON_DUPLICATE, + DSV_TYPE_PREPEND_NON_DUPLICATE, + DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS + ): + try: + env_name_and_values = remainder.split(';') + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the values') + env_name = env_name_and_values[0] + values = env_name_and_values[1:] + for value in values: + if not value: + value = prefix + elif not os.path.isabs(value): + value = os.path.join(prefix, value) + if ( + type_ == DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS and + not os.path.exists(value) + ): + comment = f'skip extending {env_name} with not existing ' \ + f'path: {value}' + if _include_comments(): + commands.append( + FORMAT_STR_COMMENT_LINE.format_map({'comment': comment})) + elif type_ == DSV_TYPE_APPEND_NON_DUPLICATE: + commands += _append_unique_value(env_name, value) + else: + commands += _prepend_unique_value(env_name, value) + else: + raise RuntimeError( + 'contains an unknown environment hook type: ' + type_) + return commands + + +env_state = {} + + +def _append_unique_value(name, value): + global env_state + if name not in env_state: + if os.environ.get(name): + env_state[name] = set(os.environ[name].split(os.pathsep)) + else: + env_state[name] = set() + # append even if the variable has not been set yet, in case a shell script sets the + # same variable without the knowledge of this Python script. + # later _remove_ending_separators() will cleanup any unintentional leading separator + extend = FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + os.pathsep + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': extend + value}) + if value not in env_state[name]: + env_state[name].add(value) + else: + if not _include_comments(): + return [] + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +def _prepend_unique_value(name, value): + global env_state + if name not in env_state: + if os.environ.get(name): + env_state[name] = set(os.environ[name].split(os.pathsep)) + else: + env_state[name] = set() + # prepend even if the variable has not been set yet, in case a shell script sets the + # same variable without the knowledge of this Python script. + # later _remove_ending_separators() will cleanup any unintentional trailing separator + extend = os.pathsep + FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value + extend}) + if value not in env_state[name]: + env_state[name].add(value) + else: + if not _include_comments(): + return [] + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +# generate commands for removing prepended underscores +def _remove_ending_separators(): + # do nothing if the shell extension does not implement the logic + if FORMAT_STR_REMOVE_TRAILING_SEPARATOR is None: + return [] + + global env_state + commands = [] + for name in env_state: + # skip variables that already had values before this script started prepending + if name in os.environ: + continue + commands += [ + FORMAT_STR_REMOVE_LEADING_SEPARATOR.format_map({'name': name}), + FORMAT_STR_REMOVE_TRAILING_SEPARATOR.format_map({'name': name})] + return commands + + +def _set(name, value): + global env_state + env_state[name] = value + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + return [line] + + +def _set_if_unset(name, value): + global env_state + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + if env_state.get(name, os.environ.get(name)): + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +if __name__ == '__main__': # pragma: no cover + try: + rc = main() + except RuntimeError as e: + print(str(e), file=sys.stderr) + rc = 1 + sys.exit(rc) diff --git a/install/_local_setup_util_sh.py b/install/_local_setup_util_sh.py new file mode 100644 index 0000000..f67eaa9 --- /dev/null +++ b/install/_local_setup_util_sh.py @@ -0,0 +1,407 @@ +# Copyright 2016-2019 Dirk Thomas +# Licensed under the Apache License, Version 2.0 + +import argparse +from collections import OrderedDict +import os +from pathlib import Path +import sys + + +FORMAT_STR_COMMENT_LINE = '# {comment}' +FORMAT_STR_SET_ENV_VAR = 'export {name}="{value}"' +FORMAT_STR_USE_ENV_VAR = '${name}' +FORMAT_STR_INVOKE_SCRIPT = 'COLCON_CURRENT_PREFIX="{prefix}" _colcon_prefix_sh_source_script "{script_path}"' # noqa: E501 +FORMAT_STR_REMOVE_LEADING_SEPARATOR = 'if [ "$(echo -n ${name} | head -c 1)" = ":" ]; then export {name}=${{{name}#?}} ; fi' # noqa: E501 +FORMAT_STR_REMOVE_TRAILING_SEPARATOR = 'if [ "$(echo -n ${name} | tail -c 1)" = ":" ]; then export {name}=${{{name}%?}} ; fi' # noqa: E501 + +DSV_TYPE_APPEND_NON_DUPLICATE = 'append-non-duplicate' +DSV_TYPE_PREPEND_NON_DUPLICATE = 'prepend-non-duplicate' +DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS = 'prepend-non-duplicate-if-exists' +DSV_TYPE_SET = 'set' +DSV_TYPE_SET_IF_UNSET = 'set-if-unset' +DSV_TYPE_SOURCE = 'source' + + +def main(argv=sys.argv[1:]): # noqa: D103 + parser = argparse.ArgumentParser( + description='Output shell commands for the packages in topological ' + 'order') + parser.add_argument( + 'primary_extension', + help='The file extension of the primary shell') + parser.add_argument( + 'additional_extension', nargs='?', + help='The additional file extension to be considered') + parser.add_argument( + '--merged-install', action='store_true', + help='All install prefixes are merged into a single location') + args = parser.parse_args(argv) + + packages = get_packages(Path(__file__).parent, args.merged_install) + + ordered_packages = order_packages(packages) + for pkg_name in ordered_packages: + if _include_comments(): + print( + FORMAT_STR_COMMENT_LINE.format_map( + {'comment': 'Package: ' + pkg_name})) + prefix = os.path.abspath(os.path.dirname(__file__)) + if not args.merged_install: + prefix = os.path.join(prefix, pkg_name) + for line in get_commands( + pkg_name, prefix, args.primary_extension, + args.additional_extension + ): + print(line) + + for line in _remove_ending_separators(): + print(line) + + +def get_packages(prefix_path, merged_install): + """ + Find packages based on colcon-specific files created during installation. + + :param Path prefix_path: The install prefix path of all packages + :param bool merged_install: The flag if the packages are all installed + directly in the prefix or if each package is installed in a subdirectory + named after the package + :returns: A mapping from the package name to the set of runtime + dependencies + :rtype: dict + """ + packages = {} + # since importing colcon_core isn't feasible here the following constant + # must match colcon_core.location.get_relative_package_index_path() + subdirectory = 'share/colcon-core/packages' + if merged_install: + # return if workspace is empty + if not (prefix_path / subdirectory).is_dir(): + return packages + # find all files in the subdirectory + for p in (prefix_path / subdirectory).iterdir(): + if not p.is_file(): + continue + if p.name.startswith('.'): + continue + add_package_runtime_dependencies(p, packages) + else: + # for each subdirectory look for the package specific file + for p in prefix_path.iterdir(): + if not p.is_dir(): + continue + if p.name.startswith('.'): + continue + p = p / subdirectory / p.name + if p.is_file(): + add_package_runtime_dependencies(p, packages) + + # remove unknown dependencies + pkg_names = set(packages.keys()) + for k in packages.keys(): + packages[k] = {d for d in packages[k] if d in pkg_names} + + return packages + + +def add_package_runtime_dependencies(path, packages): + """ + Check the path and if it exists extract the packages runtime dependencies. + + :param Path path: The resource file containing the runtime dependencies + :param dict packages: A mapping from package names to the sets of runtime + dependencies to add to + """ + content = path.read_text() + dependencies = set(content.split(os.pathsep) if content else []) + packages[path.name] = dependencies + + +def order_packages(packages): + """ + Order packages topologically. + + :param dict packages: A mapping from package name to the set of runtime + dependencies + :returns: The package names + :rtype: list + """ + # select packages with no dependencies in alphabetical order + to_be_ordered = list(packages.keys()) + ordered = [] + while to_be_ordered: + pkg_names_without_deps = [ + name for name in to_be_ordered if not packages[name]] + if not pkg_names_without_deps: + reduce_cycle_set(packages) + raise RuntimeError( + 'Circular dependency between: ' + ', '.join(sorted(packages))) + pkg_names_without_deps.sort() + pkg_name = pkg_names_without_deps[0] + to_be_ordered.remove(pkg_name) + ordered.append(pkg_name) + # remove item from dependency lists + for k in list(packages.keys()): + if pkg_name in packages[k]: + packages[k].remove(pkg_name) + return ordered + + +def reduce_cycle_set(packages): + """ + Reduce the set of packages to the ones part of the circular dependency. + + :param dict packages: A mapping from package name to the set of runtime + dependencies which is modified in place + """ + last_depended = None + while len(packages) > 0: + # get all remaining dependencies + depended = set() + for pkg_name, dependencies in packages.items(): + depended = depended.union(dependencies) + # remove all packages which are not dependent on + for name in list(packages.keys()): + if name not in depended: + del packages[name] + if last_depended: + # if remaining packages haven't changed return them + if last_depended == depended: + return packages.keys() + # otherwise reduce again + last_depended = depended + + +def _include_comments(): + # skipping comment lines when COLCON_TRACE is not set speeds up the + # processing especially on Windows + return bool(os.environ.get('COLCON_TRACE')) + + +def get_commands(pkg_name, prefix, primary_extension, additional_extension): + commands = [] + package_dsv_path = os.path.join(prefix, 'share', pkg_name, 'package.dsv') + if os.path.exists(package_dsv_path): + commands += process_dsv_file( + package_dsv_path, prefix, primary_extension, additional_extension) + return commands + + +def process_dsv_file( + dsv_path, prefix, primary_extension=None, additional_extension=None +): + commands = [] + if _include_comments(): + commands.append(FORMAT_STR_COMMENT_LINE.format_map({'comment': dsv_path})) + with open(dsv_path, 'r') as h: + content = h.read() + lines = content.splitlines() + + basenames = OrderedDict() + for i, line in enumerate(lines): + # skip over empty or whitespace-only lines + if not line.strip(): + continue + # skip over comments + if line.startswith('#'): + continue + try: + type_, remainder = line.split(';', 1) + except ValueError: + raise RuntimeError( + "Line %d in '%s' doesn't contain a semicolon separating the " + 'type from the arguments' % (i + 1, dsv_path)) + if type_ != DSV_TYPE_SOURCE: + # handle non-source lines + try: + commands += handle_dsv_types_except_source( + type_, remainder, prefix) + except RuntimeError as e: + raise RuntimeError( + "Line %d in '%s' %s" % (i + 1, dsv_path, e)) from e + else: + # group remaining source lines by basename + path_without_ext, ext = os.path.splitext(remainder) + if path_without_ext not in basenames: + basenames[path_without_ext] = set() + assert ext.startswith('.') + ext = ext[1:] + if ext in (primary_extension, additional_extension): + basenames[path_without_ext].add(ext) + + # add the dsv extension to each basename if the file exists + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if os.path.exists(basename + '.dsv'): + extensions.add('dsv') + + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if 'dsv' in extensions: + # process dsv files recursively + commands += process_dsv_file( + basename + '.dsv', prefix, primary_extension=primary_extension, + additional_extension=additional_extension) + elif primary_extension in extensions and len(extensions) == 1: + # source primary-only files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + primary_extension})] + elif additional_extension in extensions: + # source non-primary files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + additional_extension})] + + return commands + + +def handle_dsv_types_except_source(type_, remainder, prefix): + commands = [] + if type_ in (DSV_TYPE_SET, DSV_TYPE_SET_IF_UNSET): + try: + env_name, value = remainder.split(';', 1) + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the value') + try_prefixed_value = os.path.join(prefix, value) if value else prefix + if os.path.exists(try_prefixed_value): + value = try_prefixed_value + if type_ == DSV_TYPE_SET: + commands += _set(env_name, value) + elif type_ == DSV_TYPE_SET_IF_UNSET: + commands += _set_if_unset(env_name, value) + else: + assert False + elif type_ in ( + DSV_TYPE_APPEND_NON_DUPLICATE, + DSV_TYPE_PREPEND_NON_DUPLICATE, + DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS + ): + try: + env_name_and_values = remainder.split(';') + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the values') + env_name = env_name_and_values[0] + values = env_name_and_values[1:] + for value in values: + if not value: + value = prefix + elif not os.path.isabs(value): + value = os.path.join(prefix, value) + if ( + type_ == DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS and + not os.path.exists(value) + ): + comment = f'skip extending {env_name} with not existing ' \ + f'path: {value}' + if _include_comments(): + commands.append( + FORMAT_STR_COMMENT_LINE.format_map({'comment': comment})) + elif type_ == DSV_TYPE_APPEND_NON_DUPLICATE: + commands += _append_unique_value(env_name, value) + else: + commands += _prepend_unique_value(env_name, value) + else: + raise RuntimeError( + 'contains an unknown environment hook type: ' + type_) + return commands + + +env_state = {} + + +def _append_unique_value(name, value): + global env_state + if name not in env_state: + if os.environ.get(name): + env_state[name] = set(os.environ[name].split(os.pathsep)) + else: + env_state[name] = set() + # append even if the variable has not been set yet, in case a shell script sets the + # same variable without the knowledge of this Python script. + # later _remove_ending_separators() will cleanup any unintentional leading separator + extend = FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + os.pathsep + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': extend + value}) + if value not in env_state[name]: + env_state[name].add(value) + else: + if not _include_comments(): + return [] + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +def _prepend_unique_value(name, value): + global env_state + if name not in env_state: + if os.environ.get(name): + env_state[name] = set(os.environ[name].split(os.pathsep)) + else: + env_state[name] = set() + # prepend even if the variable has not been set yet, in case a shell script sets the + # same variable without the knowledge of this Python script. + # later _remove_ending_separators() will cleanup any unintentional trailing separator + extend = os.pathsep + FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value + extend}) + if value not in env_state[name]: + env_state[name].add(value) + else: + if not _include_comments(): + return [] + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +# generate commands for removing prepended underscores +def _remove_ending_separators(): + # do nothing if the shell extension does not implement the logic + if FORMAT_STR_REMOVE_TRAILING_SEPARATOR is None: + return [] + + global env_state + commands = [] + for name in env_state: + # skip variables that already had values before this script started prepending + if name in os.environ: + continue + commands += [ + FORMAT_STR_REMOVE_LEADING_SEPARATOR.format_map({'name': name}), + FORMAT_STR_REMOVE_TRAILING_SEPARATOR.format_map({'name': name})] + return commands + + +def _set(name, value): + global env_state + env_state[name] = value + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + return [line] + + +def _set_if_unset(name, value): + global env_state + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + if env_state.get(name, os.environ.get(name)): + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +if __name__ == '__main__': # pragma: no cover + try: + rc = main() + except RuntimeError as e: + print(str(e), file=sys.stderr) + rc = 1 + sys.exit(rc) diff --git a/install/local_setup.bash b/install/local_setup.bash new file mode 100644 index 0000000..03f0025 --- /dev/null +++ b/install/local_setup.bash @@ -0,0 +1,121 @@ +# generated from colcon_bash/shell/template/prefix.bash.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# a bash script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + _colcon_prefix_bash_COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)" +else + _colcon_prefix_bash_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prefix_bash_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prefix_bash_prepend_unique_value_IFS="$IFS" + IFS=":" + # start with the new value + _all_values="$_value" + _contained_value="" + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + _contained_value=1 + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + if [ -z "$_contained_value" ]; then + if [ -n "$COLCON_TRACE" ]; then + if [ "$_all_values" = "$_value" ]; then + echo "export $_listname=$_value" + else + echo "export $_listname=$_value:\$$_listname" + fi + fi + fi + unset _contained_value + # restore the field separator + IFS="$_colcon_prefix_bash_prepend_unique_value_IFS" + unset _colcon_prefix_bash_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# add this prefix to the COLCON_PREFIX_PATH +_colcon_prefix_bash_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_bash_COLCON_CURRENT_PREFIX" +unset _colcon_prefix_bash_prepend_unique_value + +# check environment variable for custom Python executable +if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then + if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then + echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist" + return 1 + fi + _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE" +else + # try the Python executable known at configure time + _colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if [ ! -f "$_colcon_python_executable" ]; then + if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then + echo "error: unable to find python3 executable" + return 1 + fi + _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"` + fi +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# get all commands in topological order +_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_bash_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh bash)" +unset _colcon_python_executable +if [ -n "$COLCON_TRACE" ]; then + echo "$(declare -f _colcon_prefix_sh_source_script)" + echo "# Execute generated script:" + echo "# <<<" + echo "${_colcon_ordered_commands}" + echo "# >>>" + echo "unset _colcon_prefix_sh_source_script" +fi +eval "${_colcon_ordered_commands}" +unset _colcon_ordered_commands + +unset _colcon_prefix_sh_source_script + +unset _colcon_prefix_bash_COLCON_CURRENT_PREFIX diff --git a/install/local_setup.ps1 b/install/local_setup.ps1 new file mode 100644 index 0000000..6f68c8d --- /dev/null +++ b/install/local_setup.ps1 @@ -0,0 +1,55 @@ +# generated from colcon_powershell/shell/template/prefix.ps1.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# check environment variable for custom Python executable +if ($env:COLCON_PYTHON_EXECUTABLE) { + if (!(Test-Path "$env:COLCON_PYTHON_EXECUTABLE" -PathType Leaf)) { + echo "error: COLCON_PYTHON_EXECUTABLE '$env:COLCON_PYTHON_EXECUTABLE' doesn't exist" + exit 1 + } + $_colcon_python_executable="$env:COLCON_PYTHON_EXECUTABLE" +} else { + # use the Python executable known at configure time + $_colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if (!(Test-Path "$_colcon_python_executable" -PathType Leaf)) { + if (!(Get-Command "python3" -ErrorAction SilentlyContinue)) { + echo "error: unable to find python3 executable" + exit 1 + } + $_colcon_python_executable="python3" + } +} + +# function to source another script with conditional trace output +# first argument: the path of the script +function _colcon_prefix_powershell_source_script { + param ( + $_colcon_prefix_powershell_source_script_param + ) + # source script with conditional trace output + if (Test-Path $_colcon_prefix_powershell_source_script_param) { + if ($env:COLCON_TRACE) { + echo ". '$_colcon_prefix_powershell_source_script_param'" + } + . "$_colcon_prefix_powershell_source_script_param" + } else { + Write-Error "not found: '$_colcon_prefix_powershell_source_script_param'" + } +} + +# get all commands in topological order +$_colcon_ordered_commands = & "$_colcon_python_executable" "$(Split-Path $PSCommandPath -Parent)/_local_setup_util_ps1.py" ps1 + +# execute all commands in topological order +if ($env:COLCON_TRACE) { + echo "Execute generated script:" + echo "<<<" + $_colcon_ordered_commands.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries) | Write-Output + echo ">>>" +} +if ($_colcon_ordered_commands) { + $_colcon_ordered_commands.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries) | Invoke-Expression +} diff --git a/install/local_setup.sh b/install/local_setup.sh new file mode 100644 index 0000000..ca84864 --- /dev/null +++ b/install/local_setup.sh @@ -0,0 +1,137 @@ +# generated from colcon_core/shell/template/prefix.sh.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# since a plain shell script can't determine its own path when being sourced +# either use the provided COLCON_CURRENT_PREFIX +# or fall back to the build time prefix (if it exists) +_colcon_prefix_sh_COLCON_CURRENT_PREFIX="/home/roy/Documents/vscode-urdf/install" +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + if [ ! -d "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX" ]; then + echo "The build time path \"$_colcon_prefix_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 + unset _colcon_prefix_sh_COLCON_CURRENT_PREFIX + return 1 + fi +else + _colcon_prefix_sh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prefix_sh_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prefix_sh_prepend_unique_value_IFS="$IFS" + IFS=":" + # start with the new value + _all_values="$_value" + _contained_value="" + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + _contained_value=1 + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + if [ -z "$_contained_value" ]; then + if [ -n "$COLCON_TRACE" ]; then + if [ "$_all_values" = "$_value" ]; then + echo "export $_listname=$_value" + else + echo "export $_listname=$_value:\$$_listname" + fi + fi + fi + unset _contained_value + # restore the field separator + IFS="$_colcon_prefix_sh_prepend_unique_value_IFS" + unset _colcon_prefix_sh_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# add this prefix to the COLCON_PREFIX_PATH +_colcon_prefix_sh_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX" +unset _colcon_prefix_sh_prepend_unique_value + +# check environment variable for custom Python executable +if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then + if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then + echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist" + return 1 + fi + _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE" +else + # try the Python executable known at configure time + _colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if [ ! -f "$_colcon_python_executable" ]; then + if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then + echo "error: unable to find python3 executable" + return 1 + fi + _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"` + fi +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# get all commands in topological order +_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh)" +unset _colcon_python_executable +if [ -n "$COLCON_TRACE" ]; then + echo "_colcon_prefix_sh_source_script() { + if [ -f \"\$1\" ]; then + if [ -n \"\$COLCON_TRACE\" ]; then + echo \"# . \\\"\$1\\\"\" + fi + . \"\$1\" + else + echo \"not found: \\\"\$1\\\"\" 1>&2 + fi + }" + echo "# Execute generated script:" + echo "# <<<" + echo "${_colcon_ordered_commands}" + echo "# >>>" + echo "unset _colcon_prefix_sh_source_script" +fi +eval "${_colcon_ordered_commands}" +unset _colcon_ordered_commands + +unset _colcon_prefix_sh_source_script + +unset _colcon_prefix_sh_COLCON_CURRENT_PREFIX diff --git a/install/local_setup.zsh b/install/local_setup.zsh new file mode 100644 index 0000000..b648710 --- /dev/null +++ b/install/local_setup.zsh @@ -0,0 +1,134 @@ +# generated from colcon_zsh/shell/template/prefix.zsh.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# a zsh script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + _colcon_prefix_zsh_COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd)" +else + _colcon_prefix_zsh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to convert array-like strings into arrays +# to workaround SH_WORD_SPLIT not being set +_colcon_prefix_zsh_convert_to_array() { + local _listname=$1 + local _dollar="$" + local _split="{=" + local _to_array="(\"$_dollar$_split$_listname}\")" + eval $_listname=$_to_array +} + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prefix_zsh_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prefix_zsh_prepend_unique_value_IFS="$IFS" + IFS=":" + # start with the new value + _all_values="$_value" + _contained_value="" + # workaround SH_WORD_SPLIT not being set + _colcon_prefix_zsh_convert_to_array _values + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + _contained_value=1 + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + if [ -z "$_contained_value" ]; then + if [ -n "$COLCON_TRACE" ]; then + if [ "$_all_values" = "$_value" ]; then + echo "export $_listname=$_value" + else + echo "export $_listname=$_value:\$$_listname" + fi + fi + fi + unset _contained_value + # restore the field separator + IFS="$_colcon_prefix_zsh_prepend_unique_value_IFS" + unset _colcon_prefix_zsh_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# add this prefix to the COLCON_PREFIX_PATH +_colcon_prefix_zsh_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_zsh_COLCON_CURRENT_PREFIX" +unset _colcon_prefix_zsh_prepend_unique_value +unset _colcon_prefix_zsh_convert_to_array + +# check environment variable for custom Python executable +if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then + if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then + echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist" + return 1 + fi + _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE" +else + # try the Python executable known at configure time + _colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if [ ! -f "$_colcon_python_executable" ]; then + if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then + echo "error: unable to find python3 executable" + return 1 + fi + _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"` + fi +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# get all commands in topological order +_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_zsh_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh zsh)" +unset _colcon_python_executable +if [ -n "$COLCON_TRACE" ]; then + echo "$(declare -f _colcon_prefix_sh_source_script)" + echo "# Execute generated script:" + echo "# <<<" + echo "${_colcon_ordered_commands}" + echo "# >>>" + echo "unset _colcon_prefix_sh_source_script" +fi +eval "${_colcon_ordered_commands}" +unset _colcon_ordered_commands + +unset _colcon_prefix_sh_source_script + +unset _colcon_prefix_zsh_COLCON_CURRENT_PREFIX diff --git a/install/setup.bash b/install/setup.bash new file mode 100644 index 0000000..9ac307b --- /dev/null +++ b/install/setup.bash @@ -0,0 +1,31 @@ +# generated from colcon_bash/shell/template/prefix_chain.bash.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_chain_bash_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source chained prefixes +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="/opt/ros/kilted" +_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash" + +# source this prefix +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)" +_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash" + +unset COLCON_CURRENT_PREFIX +unset _colcon_prefix_chain_bash_source_script diff --git a/install/setup.ps1 b/install/setup.ps1 new file mode 100644 index 0000000..c81d299 --- /dev/null +++ b/install/setup.ps1 @@ -0,0 +1,30 @@ + +# generated from colcon_powershell/shell/template/prefix_chain.ps1.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# function to source another script with conditional trace output +# first argument: the path of the script +function _colcon_prefix_chain_powershell_source_script { + param ( + $_colcon_prefix_chain_powershell_source_script_param + ) + # source script with conditional trace output + if (Test-Path $_colcon_prefix_chain_powershell_source_script_param) { + if ($env:COLCON_TRACE) { + echo ". '$_colcon_prefix_chain_powershell_source_script_param'" + } + . "$_colcon_prefix_chain_powershell_source_script_param" + } else { + Write-Error "not found: '$_colcon_prefix_chain_powershell_source_script_param'" + } +} + +# source chained prefixes +_colcon_prefix_chain_powershell_source_script "/opt/ros/kilted/local_setup.ps1" + +# source this prefix +$env:COLCON_CURRENT_PREFIX=(Split-Path $PSCommandPath -Parent) +_colcon_prefix_chain_powershell_source_script "$env:COLCON_CURRENT_PREFIX/local_setup.ps1" diff --git a/install/setup.sh b/install/setup.sh new file mode 100644 index 0000000..c73ccb6 --- /dev/null +++ b/install/setup.sh @@ -0,0 +1,45 @@ +# generated from colcon_core/shell/template/prefix_chain.sh.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# since a plain shell script can't determine its own path when being sourced +# either use the provided COLCON_CURRENT_PREFIX +# or fall back to the build time prefix (if it exists) +_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX=/home/roy/Documents/vscode-urdf/install +if [ ! -z "$COLCON_CURRENT_PREFIX" ]; then + _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +elif [ ! -d "$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX" ]; then + echo "The build time path \"$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 + unset _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX + return 1 +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_chain_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source chained prefixes +# setting COLCON_CURRENT_PREFIX avoids relying on the build time prefix of the sourced script +COLCON_CURRENT_PREFIX="/opt/ros/kilted" +_colcon_prefix_chain_sh_source_script "$COLCON_CURRENT_PREFIX/local_setup.sh" + + +# source this prefix +# setting COLCON_CURRENT_PREFIX avoids relying on the build time prefix of the sourced script +COLCON_CURRENT_PREFIX="$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX" +_colcon_prefix_chain_sh_source_script "$COLCON_CURRENT_PREFIX/local_setup.sh" + +unset _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX +unset _colcon_prefix_chain_sh_source_script +unset COLCON_CURRENT_PREFIX diff --git a/install/setup.zsh b/install/setup.zsh new file mode 100644 index 0000000..d34d9f6 --- /dev/null +++ b/install/setup.zsh @@ -0,0 +1,31 @@ +# generated from colcon_zsh/shell/template/prefix_chain.zsh.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_chain_zsh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source chained prefixes +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="/opt/ros/kilted" +_colcon_prefix_chain_zsh_source_script "$COLCON_CURRENT_PREFIX/local_setup.zsh" + +# source this prefix +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd)" +_colcon_prefix_chain_zsh_source_script "$COLCON_CURRENT_PREFIX/local_setup.zsh" + +unset COLCON_CURRENT_PREFIX +unset _colcon_prefix_chain_zsh_source_script diff --git a/language-configuration.json b/language-configuration.json new file mode 100644 index 0000000..70ce2ac --- /dev/null +++ b/language-configuration.json @@ -0,0 +1,20 @@ +{ + "comments": { + "blockComment": [""] + }, + "brackets": [ + ["<", ">"], + ["${", "}"] + ], + "autoClosingPairs": [ + { "open": "<", "close": ">" }, + { "open": "\"", "close": "\"" }, + { "open": "'", "close": "'" }, + { "open": "${", "close": "}" } + ], + "surroundingPairs": [ + ["<", ">"], + ["\"", "\""], + ["'", "'"] + ] +} diff --git a/log/COLCON_IGNORE b/log/COLCON_IGNORE new file mode 100644 index 0000000..e69de29 diff --git a/log/build_2026-05-24_23-00-34/events.log b/log/build_2026-05-24_23-00-34/events.log new file mode 100644 index 0000000..4d1b0b2 --- /dev/null +++ b/log/build_2026-05-24_23-00-34/events.log @@ -0,0 +1,2 @@ +[0.000000] (-) TimerEvent: {} +[0.001502] (-) EventReactorShutdown: {} diff --git a/log/build_2026-05-24_23-00-34/logger_all.log b/log/build_2026-05-24_23-00-34/logger_all.log new file mode 100644 index 0000000..f92d451 --- /dev/null +++ b/log/build_2026-05-24_23-00-34/logger_all.log @@ -0,0 +1,2974 @@ +[0.527s] DEBUG:colcon:Command line arguments: ['/usr/bin/colcon', 'build', '--symlink-install'] +[0.528s] DEBUG:colcon:Parsed command line arguments: Namespace(log_base=None, log_level=None, verb_name='build', build_base='build', install_base='install', merge_install=False, symlink_install=True, test_result_base=None, continue_on_error=False, executor='parallel', parallel_workers=16, event_handlers=None, ignore_user_meta=False, metas=['./colcon.meta'], base_paths=['.'], packages_ignore=None, packages_ignore_regex=None, paths=None, packages_up_to=None, packages_up_to_regex=None, packages_above=None, packages_above_and_dependencies=None, packages_above_depth=None, packages_select_by_dep=None, packages_skip_by_dep=None, packages_skip_up_to=None, packages_select_build_failed=False, packages_skip_build_finished=False, packages_select_test_failures=False, packages_skip_test_passed=False, packages_select=None, packages_skip=None, packages_select_regex=None, packages_skip_regex=None, packages_start=None, packages_end=None, allow_overriding=[], cmake_args=None, cmake_target=None, cmake_target_skip_unavailable=False, cmake_clean_cache=False, cmake_clean_first=False, cmake_force_configure=False, ament_cmake_args=None, catkin_cmake_args=None, catkin_skip_building_tests=False, mixin_files=None, mixin=None, verb_parser=, verb_extension=, main=>, mixin_verb=('build',)) +[0.731s] Level 1:colcon.colcon_core.package_discovery:discover_packages(colcon_meta) check parameters +[0.732s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) check parameters +[0.732s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) check parameters +[0.732s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) check parameters +[0.732s] Level 1:colcon.colcon_core.package_discovery:discover_packages(colcon_meta) discover +[0.733s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) discover +[0.733s] INFO:colcon.colcon_core.package_discovery:Crawling recursively for packages in '/home/roy/Documents/vscode-urdf' +[0.733s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['ignore', 'ignore_ament_install'] +[0.734s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ignore' +[0.734s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ignore_ament_install' +[0.734s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['colcon_pkg'] +[0.734s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'colcon_pkg' +[0.734s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['colcon_meta'] +[0.734s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'colcon_meta' +[0.734s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['ros'] +[0.735s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ros' +[0.850s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['cmake', 'python'] +[0.850s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'cmake' +[0.851s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'python' +[0.851s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['python_setup_py'] +[0.851s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'python_setup_py' +[0.851s] Level 1:colcon.colcon_core.package_identification:_identify(build) by extensions ['ignore', 'ignore_ament_install'] +[0.852s] Level 1:colcon.colcon_core.package_identification:_identify(build) by extension 'ignore' +[0.852s] Level 1:colcon.colcon_core.package_identification:_identify(build) ignored +[0.852s] Level 1:colcon.colcon_core.package_identification:_identify(client) by extensions ['ignore', 'ignore_ament_install'] +[0.853s] Level 1:colcon.colcon_core.package_identification:_identify(client) by extension 'ignore' +[0.853s] Level 1:colcon.colcon_core.package_identification:_identify(client) by extension 'ignore_ament_install' +[0.853s] Level 1:colcon.colcon_core.package_identification:_identify(client) by extensions ['colcon_pkg'] +[0.853s] Level 1:colcon.colcon_core.package_identification:_identify(client) by extension 'colcon_pkg' +[0.853s] Level 1:colcon.colcon_core.package_identification:_identify(client) by extensions ['colcon_meta'] +[0.853s] Level 1:colcon.colcon_core.package_identification:_identify(client) by extension 'colcon_meta' +[0.853s] Level 1:colcon.colcon_core.package_identification:_identify(client) by extensions ['ros'] +[0.854s] Level 1:colcon.colcon_core.package_identification:_identify(client) by extension 'ros' +[0.854s] Level 1:colcon.colcon_core.package_identification:_identify(client) by extensions ['cmake', 'python'] +[0.854s] Level 1:colcon.colcon_core.package_identification:_identify(client) by extension 'cmake' +[0.854s] Level 1:colcon.colcon_core.package_identification:_identify(client) by extension 'python' +[0.854s] Level 1:colcon.colcon_core.package_identification:_identify(client) by extensions ['python_setup_py'] +[0.854s] Level 1:colcon.colcon_core.package_identification:_identify(client) by extension 'python_setup_py' +[0.860s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules) by extensions ['ignore', 'ignore_ament_install'] +[0.861s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules) by extension 'ignore' +[0.861s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules) by extension 'ignore_ament_install' +[0.862s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules) by extensions ['colcon_pkg'] +[0.862s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules) by extension 'colcon_pkg' +[0.862s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules) by extensions ['colcon_meta'] +[0.862s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules) by extension 'colcon_meta' +[0.862s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules) by extensions ['ros'] +[0.862s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules) by extension 'ros' +[0.862s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules) by extensions ['cmake', 'python'] +[0.863s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules) by extension 'cmake' +[0.863s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules) by extension 'python' +[0.863s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules) by extensions ['python_setup_py'] +[0.863s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules) by extension 'python_setup_py' +[0.864s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild) by extensions ['ignore', 'ignore_ament_install'] +[0.864s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild) by extension 'ignore' +[0.864s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild) by extension 'ignore_ament_install' +[0.864s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild) by extensions ['colcon_pkg'] +[0.865s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild) by extension 'colcon_pkg' +[0.865s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild) by extensions ['colcon_meta'] +[0.865s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild) by extension 'colcon_meta' +[0.865s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild) by extensions ['ros'] +[0.865s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild) by extension 'ros' +[0.865s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild) by extensions ['cmake', 'python'] +[0.865s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild) by extension 'cmake' +[0.865s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild) by extension 'python' +[0.866s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild) by extensions ['python_setup_py'] +[0.866s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild) by extension 'python_setup_py' +[0.866s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64) by extensions ['ignore', 'ignore_ament_install'] +[0.866s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64) by extension 'ignore' +[0.867s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64) by extension 'ignore_ament_install' +[0.867s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64) by extensions ['colcon_pkg'] +[0.867s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64) by extension 'colcon_pkg' +[0.867s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64) by extensions ['colcon_meta'] +[0.867s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64) by extension 'colcon_meta' +[0.867s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64) by extensions ['ros'] +[0.867s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64) by extension 'ros' +[0.868s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64) by extensions ['cmake', 'python'] +[0.868s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64) by extension 'cmake' +[0.868s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64) by extension 'python' +[0.868s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64) by extensions ['python_setup_py'] +[0.868s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64) by extension 'python_setup_py' +[0.869s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64/bin) by extensions ['ignore', 'ignore_ament_install'] +[0.869s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64/bin) by extension 'ignore' +[0.869s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64/bin) by extension 'ignore_ament_install' +[0.870s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64/bin) by extensions ['colcon_pkg'] +[0.870s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64/bin) by extension 'colcon_pkg' +[0.870s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64/bin) by extensions ['colcon_meta'] +[0.870s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64/bin) by extension 'colcon_meta' +[0.870s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64/bin) by extensions ['ros'] +[0.870s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64/bin) by extension 'ros' +[0.871s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64/bin) by extensions ['cmake', 'python'] +[0.871s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64/bin) by extension 'cmake' +[0.871s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64/bin) by extension 'python' +[0.871s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64/bin) by extensions ['python_setup_py'] +[0.871s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@esbuild/linux-x64/bin) by extension 'python_setup_py' +[0.872s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types) by extensions ['ignore', 'ignore_ament_install'] +[0.872s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types) by extension 'ignore' +[0.873s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types) by extension 'ignore_ament_install' +[0.873s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types) by extensions ['colcon_pkg'] +[0.873s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types) by extension 'colcon_pkg' +[0.873s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types) by extensions ['colcon_meta'] +[0.874s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types) by extension 'colcon_meta' +[0.874s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types) by extensions ['ros'] +[0.874s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types) by extension 'ros' +[0.875s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types) by extensions ['cmake', 'python'] +[0.875s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types) by extension 'cmake' +[0.875s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types) by extension 'python' +[0.876s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types) by extensions ['python_setup_py'] +[0.876s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types) by extension 'python_setup_py' +[0.876s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node) by extensions ['ignore', 'ignore_ament_install'] +[0.877s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node) by extension 'ignore' +[0.877s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node) by extension 'ignore_ament_install' +[0.877s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node) by extensions ['colcon_pkg'] +[0.877s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node) by extension 'colcon_pkg' +[0.878s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node) by extensions ['colcon_meta'] +[0.878s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node) by extension 'colcon_meta' +[0.878s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node) by extensions ['ros'] +[0.878s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node) by extension 'ros' +[0.878s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node) by extensions ['cmake', 'python'] +[0.878s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node) by extension 'cmake' +[0.878s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node) by extension 'python' +[0.879s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node) by extensions ['python_setup_py'] +[0.879s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node) by extension 'python_setup_py' +[0.880s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/assert) by extensions ['ignore', 'ignore_ament_install'] +[0.881s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/assert) by extension 'ignore' +[0.881s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/assert) by extension 'ignore_ament_install' +[0.882s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/assert) by extensions ['colcon_pkg'] +[0.882s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/assert) by extension 'colcon_pkg' +[0.882s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/assert) by extensions ['colcon_meta'] +[0.882s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/assert) by extension 'colcon_meta' +[0.883s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/assert) by extensions ['ros'] +[0.883s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/assert) by extension 'ros' +[0.883s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/assert) by extensions ['cmake', 'python'] +[0.883s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/assert) by extension 'cmake' +[0.883s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/assert) by extension 'python' +[0.883s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/assert) by extensions ['python_setup_py'] +[0.883s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/assert) by extension 'python_setup_py' +[0.884s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/compatibility) by extensions ['ignore', 'ignore_ament_install'] +[0.885s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/compatibility) by extension 'ignore' +[0.886s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/compatibility) by extension 'ignore_ament_install' +[0.886s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/compatibility) by extensions ['colcon_pkg'] +[0.886s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/compatibility) by extension 'colcon_pkg' +[0.886s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/compatibility) by extensions ['colcon_meta'] +[0.887s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/compatibility) by extension 'colcon_meta' +[0.887s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/compatibility) by extensions ['ros'] +[0.887s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/compatibility) by extension 'ros' +[0.888s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/compatibility) by extensions ['cmake', 'python'] +[0.888s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/compatibility) by extension 'cmake' +[0.888s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/compatibility) by extension 'python' +[0.888s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/compatibility) by extensions ['python_setup_py'] +[0.888s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/compatibility) by extension 'python_setup_py' +[0.889s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/dns) by extensions ['ignore', 'ignore_ament_install'] +[0.890s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/dns) by extension 'ignore' +[0.890s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/dns) by extension 'ignore_ament_install' +[0.890s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/dns) by extensions ['colcon_pkg'] +[0.891s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/dns) by extension 'colcon_pkg' +[0.891s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/dns) by extensions ['colcon_meta'] +[0.891s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/dns) by extension 'colcon_meta' +[0.891s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/dns) by extensions ['ros'] +[0.891s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/dns) by extension 'ros' +[0.892s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/dns) by extensions ['cmake', 'python'] +[0.892s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/dns) by extension 'cmake' +[0.892s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/dns) by extension 'python' +[0.892s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/dns) by extensions ['python_setup_py'] +[0.892s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/dns) by extension 'python_setup_py' +[0.893s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/fs) by extensions ['ignore', 'ignore_ament_install'] +[0.893s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/fs) by extension 'ignore' +[0.894s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/fs) by extension 'ignore_ament_install' +[0.895s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/fs) by extensions ['colcon_pkg'] +[0.895s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/fs) by extension 'colcon_pkg' +[0.895s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/fs) by extensions ['colcon_meta'] +[0.895s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/fs) by extension 'colcon_meta' +[0.896s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/fs) by extensions ['ros'] +[0.896s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/fs) by extension 'ros' +[0.896s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/fs) by extensions ['cmake', 'python'] +[0.897s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/fs) by extension 'cmake' +[0.897s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/fs) by extension 'python' +[0.897s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/fs) by extensions ['python_setup_py'] +[0.897s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/fs) by extension 'python_setup_py' +[0.898s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/readline) by extensions ['ignore', 'ignore_ament_install'] +[0.898s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/readline) by extension 'ignore' +[0.899s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/readline) by extension 'ignore_ament_install' +[0.899s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/readline) by extensions ['colcon_pkg'] +[0.899s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/readline) by extension 'colcon_pkg' +[0.900s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/readline) by extensions ['colcon_meta'] +[0.900s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/readline) by extension 'colcon_meta' +[0.900s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/readline) by extensions ['ros'] +[0.900s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/readline) by extension 'ros' +[0.901s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/readline) by extensions ['cmake', 'python'] +[0.901s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/readline) by extension 'cmake' +[0.901s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/readline) by extension 'python' +[0.901s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/readline) by extensions ['python_setup_py'] +[0.901s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/readline) by extension 'python_setup_py' +[0.902s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/stream) by extensions ['ignore', 'ignore_ament_install'] +[0.903s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/stream) by extension 'ignore' +[0.903s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/stream) by extension 'ignore_ament_install' +[0.903s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/stream) by extensions ['colcon_pkg'] +[0.903s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/stream) by extension 'colcon_pkg' +[0.904s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/stream) by extensions ['colcon_meta'] +[0.904s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/stream) by extension 'colcon_meta' +[0.904s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/stream) by extensions ['ros'] +[0.904s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/stream) by extension 'ros' +[0.905s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/stream) by extensions ['cmake', 'python'] +[0.905s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/stream) by extension 'cmake' +[0.905s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/stream) by extension 'python' +[0.906s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/stream) by extensions ['python_setup_py'] +[0.906s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/stream) by extension 'python_setup_py' +[0.907s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/timers) by extensions ['ignore', 'ignore_ament_install'] +[0.907s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/timers) by extension 'ignore' +[0.908s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/timers) by extension 'ignore_ament_install' +[0.908s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/timers) by extensions ['colcon_pkg'] +[0.908s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/timers) by extension 'colcon_pkg' +[0.908s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/timers) by extensions ['colcon_meta'] +[0.909s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/timers) by extension 'colcon_meta' +[0.909s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/timers) by extensions ['ros'] +[0.909s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/timers) by extension 'ros' +[0.909s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/timers) by extensions ['cmake', 'python'] +[0.909s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/timers) by extension 'cmake' +[0.909s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/timers) by extension 'python' +[0.910s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/timers) by extensions ['python_setup_py'] +[0.910s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/timers) by extension 'python_setup_py' +[0.911s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/ts5.6) by extensions ['ignore', 'ignore_ament_install'] +[0.911s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/ts5.6) by extension 'ignore' +[0.912s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/ts5.6) by extension 'ignore_ament_install' +[0.912s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/ts5.6) by extensions ['colcon_pkg'] +[0.912s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/ts5.6) by extension 'colcon_pkg' +[0.913s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/ts5.6) by extensions ['colcon_meta'] +[0.913s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/ts5.6) by extension 'colcon_meta' +[0.913s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/ts5.6) by extensions ['ros'] +[0.913s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/ts5.6) by extension 'ros' +[0.914s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/ts5.6) by extensions ['cmake', 'python'] +[0.914s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/ts5.6) by extension 'cmake' +[0.914s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/ts5.6) by extension 'python' +[0.914s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/ts5.6) by extensions ['python_setup_py'] +[0.914s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/ts5.6) by extension 'python_setup_py' +[0.915s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/web-globals) by extensions ['ignore', 'ignore_ament_install'] +[0.915s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/web-globals) by extension 'ignore' +[0.915s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/web-globals) by extension 'ignore_ament_install' +[0.916s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/web-globals) by extensions ['colcon_pkg'] +[0.916s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/web-globals) by extension 'colcon_pkg' +[0.916s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/web-globals) by extensions ['colcon_meta'] +[0.916s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/web-globals) by extension 'colcon_meta' +[0.917s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/web-globals) by extensions ['ros'] +[0.917s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/web-globals) by extension 'ros' +[0.917s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/web-globals) by extensions ['cmake', 'python'] +[0.917s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/web-globals) by extension 'cmake' +[0.917s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/web-globals) by extension 'python' +[0.917s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/web-globals) by extensions ['python_setup_py'] +[0.917s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/node/web-globals) by extension 'python_setup_py' +[0.918s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/vscode) by extensions ['ignore', 'ignore_ament_install'] +[0.918s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/vscode) by extension 'ignore' +[0.919s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/vscode) by extension 'ignore_ament_install' +[0.919s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/vscode) by extensions ['colcon_pkg'] +[0.919s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/vscode) by extension 'colcon_pkg' +[0.919s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/vscode) by extensions ['colcon_meta'] +[0.919s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/vscode) by extension 'colcon_meta' +[0.919s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/vscode) by extensions ['ros'] +[0.919s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/vscode) by extension 'ros' +[0.920s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/vscode) by extensions ['cmake', 'python'] +[0.920s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/vscode) by extension 'cmake' +[0.920s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/vscode) by extension 'python' +[0.920s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/vscode) by extensions ['python_setup_py'] +[0.920s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/@types/vscode) by extension 'python_setup_py' +[0.921s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/balanced-match) by extensions ['ignore', 'ignore_ament_install'] +[0.922s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/balanced-match) by extension 'ignore' +[0.922s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/balanced-match) by extension 'ignore_ament_install' +[0.922s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/balanced-match) by extensions ['colcon_pkg'] +[0.922s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/balanced-match) by extension 'colcon_pkg' +[0.922s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/balanced-match) by extensions ['colcon_meta'] +[0.922s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/balanced-match) by extension 'colcon_meta' +[0.922s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/balanced-match) by extensions ['ros'] +[0.923s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/balanced-match) by extension 'ros' +[0.923s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/balanced-match) by extensions ['cmake', 'python'] +[0.923s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/balanced-match) by extension 'cmake' +[0.923s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/balanced-match) by extension 'python' +[0.923s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/balanced-match) by extensions ['python_setup_py'] +[0.923s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/balanced-match) by extension 'python_setup_py' +[0.924s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/brace-expansion) by extensions ['ignore', 'ignore_ament_install'] +[0.924s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/brace-expansion) by extension 'ignore' +[0.925s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/brace-expansion) by extension 'ignore_ament_install' +[0.925s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/brace-expansion) by extensions ['colcon_pkg'] +[0.925s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/brace-expansion) by extension 'colcon_pkg' +[0.925s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/brace-expansion) by extensions ['colcon_meta'] +[0.925s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/brace-expansion) by extension 'colcon_meta' +[0.925s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/brace-expansion) by extensions ['ros'] +[0.925s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/brace-expansion) by extension 'ros' +[0.926s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/brace-expansion) by extensions ['cmake', 'python'] +[0.926s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/brace-expansion) by extension 'cmake' +[0.926s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/brace-expansion) by extension 'python' +[0.926s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/brace-expansion) by extensions ['python_setup_py'] +[0.926s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/brace-expansion) by extension 'python_setup_py' +[0.927s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild) by extensions ['ignore', 'ignore_ament_install'] +[0.927s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild) by extension 'ignore' +[0.928s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild) by extension 'ignore_ament_install' +[0.928s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild) by extensions ['colcon_pkg'] +[0.928s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild) by extension 'colcon_pkg' +[0.928s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild) by extensions ['colcon_meta'] +[0.928s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild) by extension 'colcon_meta' +[0.928s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild) by extensions ['ros'] +[0.929s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild) by extension 'ros' +[0.929s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild) by extensions ['cmake', 'python'] +[0.929s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild) by extension 'cmake' +[0.929s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild) by extension 'python' +[0.929s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild) by extensions ['python_setup_py'] +[0.929s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild) by extension 'python_setup_py' +[0.930s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/bin) by extensions ['ignore', 'ignore_ament_install'] +[0.930s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/bin) by extension 'ignore' +[0.930s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/bin) by extension 'ignore_ament_install' +[0.931s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/bin) by extensions ['colcon_pkg'] +[0.931s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/bin) by extension 'colcon_pkg' +[0.931s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/bin) by extensions ['colcon_meta'] +[0.931s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/bin) by extension 'colcon_meta' +[0.931s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/bin) by extensions ['ros'] +[0.931s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/bin) by extension 'ros' +[0.931s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/bin) by extensions ['cmake', 'python'] +[0.931s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/bin) by extension 'cmake' +[0.932s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/bin) by extension 'python' +[0.932s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/bin) by extensions ['python_setup_py'] +[0.932s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/bin) by extension 'python_setup_py' +[0.933s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/lib) by extensions ['ignore', 'ignore_ament_install'] +[0.933s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/lib) by extension 'ignore' +[0.934s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/lib) by extension 'ignore_ament_install' +[0.934s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/lib) by extensions ['colcon_pkg'] +[0.934s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/lib) by extension 'colcon_pkg' +[0.934s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/lib) by extensions ['colcon_meta'] +[0.935s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/lib) by extension 'colcon_meta' +[0.935s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/lib) by extensions ['ros'] +[0.935s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/lib) by extension 'ros' +[0.935s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/lib) by extensions ['cmake', 'python'] +[0.935s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/lib) by extension 'cmake' +[0.936s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/lib) by extension 'python' +[0.936s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/lib) by extensions ['python_setup_py'] +[0.936s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/esbuild/lib) by extension 'python_setup_py' +[0.937s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch) by extensions ['ignore', 'ignore_ament_install'] +[0.937s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch) by extension 'ignore' +[0.938s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch) by extension 'ignore_ament_install' +[0.939s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch) by extensions ['colcon_pkg'] +[0.939s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch) by extension 'colcon_pkg' +[0.939s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch) by extensions ['colcon_meta'] +[0.939s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch) by extension 'colcon_meta' +[0.939s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch) by extensions ['ros'] +[0.940s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch) by extension 'ros' +[0.940s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch) by extensions ['cmake', 'python'] +[0.940s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch) by extension 'cmake' +[0.940s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch) by extension 'python' +[0.940s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch) by extensions ['python_setup_py'] +[0.940s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch) by extension 'python_setup_py' +[0.941s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch/lib) by extensions ['ignore', 'ignore_ament_install'] +[0.941s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch/lib) by extension 'ignore' +[0.941s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch/lib) by extension 'ignore_ament_install' +[0.942s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch/lib) by extensions ['colcon_pkg'] +[0.942s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch/lib) by extension 'colcon_pkg' +[0.942s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch/lib) by extensions ['colcon_meta'] +[0.942s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch/lib) by extension 'colcon_meta' +[0.942s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch/lib) by extensions ['ros'] +[0.942s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch/lib) by extension 'ros' +[0.942s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch/lib) by extensions ['cmake', 'python'] +[0.942s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch/lib) by extension 'cmake' +[0.942s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch/lib) by extension 'python' +[0.943s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch/lib) by extensions ['python_setup_py'] +[0.943s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/minimatch/lib) by extension 'python_setup_py' +[0.943s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver) by extensions ['ignore', 'ignore_ament_install'] +[0.944s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver) by extension 'ignore' +[0.944s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver) by extension 'ignore_ament_install' +[0.944s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver) by extensions ['colcon_pkg'] +[0.944s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver) by extension 'colcon_pkg' +[0.944s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver) by extensions ['colcon_meta'] +[0.944s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver) by extension 'colcon_meta' +[0.944s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver) by extensions ['ros'] +[0.944s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver) by extension 'ros' +[0.945s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver) by extensions ['cmake', 'python'] +[0.945s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver) by extension 'cmake' +[0.945s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver) by extension 'python' +[0.945s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver) by extensions ['python_setup_py'] +[0.945s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver) by extension 'python_setup_py' +[0.945s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/bin) by extensions ['ignore', 'ignore_ament_install'] +[0.946s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/bin) by extension 'ignore' +[0.946s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/bin) by extension 'ignore_ament_install' +[0.946s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/bin) by extensions ['colcon_pkg'] +[0.946s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/bin) by extension 'colcon_pkg' +[0.946s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/bin) by extensions ['colcon_meta'] +[0.946s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/bin) by extension 'colcon_meta' +[0.947s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/bin) by extensions ['ros'] +[0.947s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/bin) by extension 'ros' +[0.947s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/bin) by extensions ['cmake', 'python'] +[0.947s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/bin) by extension 'cmake' +[0.947s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/bin) by extension 'python' +[0.948s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/bin) by extensions ['python_setup_py'] +[0.948s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/bin) by extension 'python_setup_py' +[0.949s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/classes) by extensions ['ignore', 'ignore_ament_install'] +[0.949s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/classes) by extension 'ignore' +[0.949s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/classes) by extension 'ignore_ament_install' +[0.950s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/classes) by extensions ['colcon_pkg'] +[0.950s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/classes) by extension 'colcon_pkg' +[0.950s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/classes) by extensions ['colcon_meta'] +[0.950s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/classes) by extension 'colcon_meta' +[0.950s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/classes) by extensions ['ros'] +[0.950s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/classes) by extension 'ros' +[0.951s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/classes) by extensions ['cmake', 'python'] +[0.951s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/classes) by extension 'cmake' +[0.951s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/classes) by extension 'python' +[0.951s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/classes) by extensions ['python_setup_py'] +[0.952s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/classes) by extension 'python_setup_py' +[0.952s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/functions) by extensions ['ignore', 'ignore_ament_install'] +[0.953s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/functions) by extension 'ignore' +[0.953s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/functions) by extension 'ignore_ament_install' +[0.953s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/functions) by extensions ['colcon_pkg'] +[0.953s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/functions) by extension 'colcon_pkg' +[0.954s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/functions) by extensions ['colcon_meta'] +[0.954s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/functions) by extension 'colcon_meta' +[0.954s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/functions) by extensions ['ros'] +[0.954s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/functions) by extension 'ros' +[0.954s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/functions) by extensions ['cmake', 'python'] +[0.955s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/functions) by extension 'cmake' +[0.955s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/functions) by extension 'python' +[0.955s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/functions) by extensions ['python_setup_py'] +[0.955s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/functions) by extension 'python_setup_py' +[0.956s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/internal) by extensions ['ignore', 'ignore_ament_install'] +[0.956s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/internal) by extension 'ignore' +[0.957s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/internal) by extension 'ignore_ament_install' +[0.957s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/internal) by extensions ['colcon_pkg'] +[0.957s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/internal) by extension 'colcon_pkg' +[0.958s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/internal) by extensions ['colcon_meta'] +[0.958s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/internal) by extension 'colcon_meta' +[0.959s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/internal) by extensions ['ros'] +[0.959s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/internal) by extension 'ros' +[0.959s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/internal) by extensions ['cmake', 'python'] +[0.959s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/internal) by extension 'cmake' +[0.960s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/internal) by extension 'python' +[0.960s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/internal) by extensions ['python_setup_py'] +[0.960s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/internal) by extension 'python_setup_py' +[0.960s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/ranges) by extensions ['ignore', 'ignore_ament_install'] +[0.961s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/ranges) by extension 'ignore' +[0.961s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/ranges) by extension 'ignore_ament_install' +[0.961s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/ranges) by extensions ['colcon_pkg'] +[0.961s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/ranges) by extension 'colcon_pkg' +[0.961s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/ranges) by extensions ['colcon_meta'] +[0.961s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/ranges) by extension 'colcon_meta' +[0.962s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/ranges) by extensions ['ros'] +[0.962s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/ranges) by extension 'ros' +[0.962s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/ranges) by extensions ['cmake', 'python'] +[0.962s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/ranges) by extension 'cmake' +[0.962s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/ranges) by extension 'python' +[0.962s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/ranges) by extensions ['python_setup_py'] +[0.962s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/semver/ranges) by extension 'python_setup_py' +[0.963s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript) by extensions ['ignore', 'ignore_ament_install'] +[0.963s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript) by extension 'ignore' +[0.964s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript) by extension 'ignore_ament_install' +[0.964s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript) by extensions ['colcon_pkg'] +[0.964s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript) by extension 'colcon_pkg' +[0.964s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript) by extensions ['colcon_meta'] +[0.964s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript) by extension 'colcon_meta' +[0.965s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript) by extensions ['ros'] +[0.965s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript) by extension 'ros' +[0.965s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript) by extensions ['cmake', 'python'] +[0.965s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript) by extension 'cmake' +[0.965s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript) by extension 'python' +[0.965s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript) by extensions ['python_setup_py'] +[0.965s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript) by extension 'python_setup_py' +[0.966s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/bin) by extensions ['ignore', 'ignore_ament_install'] +[0.966s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/bin) by extension 'ignore' +[0.967s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/bin) by extension 'ignore_ament_install' +[0.967s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/bin) by extensions ['colcon_pkg'] +[0.967s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/bin) by extension 'colcon_pkg' +[0.967s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/bin) by extensions ['colcon_meta'] +[0.968s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/bin) by extension 'colcon_meta' +[0.968s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/bin) by extensions ['ros'] +[0.968s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/bin) by extension 'ros' +[0.969s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/bin) by extensions ['cmake', 'python'] +[0.969s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/bin) by extension 'cmake' +[0.969s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/bin) by extension 'python' +[0.969s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/bin) by extensions ['python_setup_py'] +[0.969s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/bin) by extension 'python_setup_py' +[0.970s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib) by extensions ['ignore', 'ignore_ament_install'] +[0.971s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib) by extension 'ignore' +[0.971s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib) by extension 'ignore_ament_install' +[0.972s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib) by extensions ['colcon_pkg'] +[0.972s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib) by extension 'colcon_pkg' +[0.972s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib) by extensions ['colcon_meta'] +[0.972s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib) by extension 'colcon_meta' +[0.972s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib) by extensions ['ros'] +[0.973s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib) by extension 'ros' +[0.973s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib) by extensions ['cmake', 'python'] +[0.973s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib) by extension 'cmake' +[0.974s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib) by extension 'python' +[0.974s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib) by extensions ['python_setup_py'] +[0.974s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib) by extension 'python_setup_py' +[0.975s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/cs) by extensions ['ignore', 'ignore_ament_install'] +[0.975s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/cs) by extension 'ignore' +[0.976s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/cs) by extension 'ignore_ament_install' +[0.976s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/cs) by extensions ['colcon_pkg'] +[0.976s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/cs) by extension 'colcon_pkg' +[0.976s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/cs) by extensions ['colcon_meta'] +[0.976s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/cs) by extension 'colcon_meta' +[0.976s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/cs) by extensions ['ros'] +[0.977s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/cs) by extension 'ros' +[0.977s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/cs) by extensions ['cmake', 'python'] +[0.977s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/cs) by extension 'cmake' +[0.977s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/cs) by extension 'python' +[0.977s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/cs) by extensions ['python_setup_py'] +[0.977s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/cs) by extension 'python_setup_py' +[0.978s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/de) by extensions ['ignore', 'ignore_ament_install'] +[0.979s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/de) by extension 'ignore' +[0.979s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/de) by extension 'ignore_ament_install' +[0.979s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/de) by extensions ['colcon_pkg'] +[0.980s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/de) by extension 'colcon_pkg' +[0.980s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/de) by extensions ['colcon_meta'] +[0.980s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/de) by extension 'colcon_meta' +[0.980s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/de) by extensions ['ros'] +[0.980s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/de) by extension 'ros' +[0.980s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/de) by extensions ['cmake', 'python'] +[0.980s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/de) by extension 'cmake' +[0.981s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/de) by extension 'python' +[0.981s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/de) by extensions ['python_setup_py'] +[0.981s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/de) by extension 'python_setup_py' +[0.981s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/es) by extensions ['ignore', 'ignore_ament_install'] +[0.982s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/es) by extension 'ignore' +[0.982s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/es) by extension 'ignore_ament_install' +[0.982s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/es) by extensions ['colcon_pkg'] +[0.982s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/es) by extension 'colcon_pkg' +[0.983s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/es) by extensions ['colcon_meta'] +[0.983s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/es) by extension 'colcon_meta' +[0.983s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/es) by extensions ['ros'] +[0.983s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/es) by extension 'ros' +[0.983s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/es) by extensions ['cmake', 'python'] +[0.983s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/es) by extension 'cmake' +[0.983s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/es) by extension 'python' +[0.984s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/es) by extensions ['python_setup_py'] +[0.984s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/es) by extension 'python_setup_py' +[0.985s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/fr) by extensions ['ignore', 'ignore_ament_install'] +[0.985s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/fr) by extension 'ignore' +[0.985s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/fr) by extension 'ignore_ament_install' +[0.985s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/fr) by extensions ['colcon_pkg'] +[0.985s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/fr) by extension 'colcon_pkg' +[0.986s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/fr) by extensions ['colcon_meta'] +[0.986s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/fr) by extension 'colcon_meta' +[0.986s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/fr) by extensions ['ros'] +[0.986s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/fr) by extension 'ros' +[0.986s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/fr) by extensions ['cmake', 'python'] +[0.986s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/fr) by extension 'cmake' +[0.986s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/fr) by extension 'python' +[0.986s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/fr) by extensions ['python_setup_py'] +[0.986s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/fr) by extension 'python_setup_py' +[0.987s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/it) by extensions ['ignore', 'ignore_ament_install'] +[0.987s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/it) by extension 'ignore' +[0.988s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/it) by extension 'ignore_ament_install' +[0.989s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/it) by extensions ['colcon_pkg'] +[0.989s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/it) by extension 'colcon_pkg' +[0.989s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/it) by extensions ['colcon_meta'] +[0.989s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/it) by extension 'colcon_meta' +[0.990s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/it) by extensions ['ros'] +[0.990s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/it) by extension 'ros' +[0.990s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/it) by extensions ['cmake', 'python'] +[0.990s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/it) by extension 'cmake' +[0.990s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/it) by extension 'python' +[0.991s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/it) by extensions ['python_setup_py'] +[0.991s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/it) by extension 'python_setup_py' +[0.992s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ja) by extensions ['ignore', 'ignore_ament_install'] +[0.992s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ja) by extension 'ignore' +[0.993s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ja) by extension 'ignore_ament_install' +[0.993s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ja) by extensions ['colcon_pkg'] +[0.993s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ja) by extension 'colcon_pkg' +[0.994s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ja) by extensions ['colcon_meta'] +[0.994s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ja) by extension 'colcon_meta' +[0.994s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ja) by extensions ['ros'] +[0.995s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ja) by extension 'ros' +[0.995s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ja) by extensions ['cmake', 'python'] +[0.995s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ja) by extension 'cmake' +[0.995s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ja) by extension 'python' +[0.996s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ja) by extensions ['python_setup_py'] +[0.996s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ja) by extension 'python_setup_py' +[0.997s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ko) by extensions ['ignore', 'ignore_ament_install'] +[0.997s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ko) by extension 'ignore' +[0.997s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ko) by extension 'ignore_ament_install' +[0.997s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ko) by extensions ['colcon_pkg'] +[0.998s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ko) by extension 'colcon_pkg' +[0.998s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ko) by extensions ['colcon_meta'] +[0.998s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ko) by extension 'colcon_meta' +[0.998s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ko) by extensions ['ros'] +[0.998s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ko) by extension 'ros' +[0.999s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ko) by extensions ['cmake', 'python'] +[0.999s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ko) by extension 'cmake' +[0.999s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ko) by extension 'python' +[0.999s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ko) by extensions ['python_setup_py'] +[0.999s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ko) by extension 'python_setup_py' +[1.000s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pl) by extensions ['ignore', 'ignore_ament_install'] +[1.000s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pl) by extension 'ignore' +[1.001s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pl) by extension 'ignore_ament_install' +[1.001s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pl) by extensions ['colcon_pkg'] +[1.001s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pl) by extension 'colcon_pkg' +[1.001s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pl) by extensions ['colcon_meta'] +[1.001s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pl) by extension 'colcon_meta' +[1.002s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pl) by extensions ['ros'] +[1.002s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pl) by extension 'ros' +[1.002s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pl) by extensions ['cmake', 'python'] +[1.002s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pl) by extension 'cmake' +[1.002s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pl) by extension 'python' +[1.002s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pl) by extensions ['python_setup_py'] +[1.003s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pl) by extension 'python_setup_py' +[1.003s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pt-br) by extensions ['ignore', 'ignore_ament_install'] +[1.004s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pt-br) by extension 'ignore' +[1.004s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pt-br) by extension 'ignore_ament_install' +[1.004s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pt-br) by extensions ['colcon_pkg'] +[1.004s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pt-br) by extension 'colcon_pkg' +[1.004s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pt-br) by extensions ['colcon_meta'] +[1.004s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pt-br) by extension 'colcon_meta' +[1.005s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pt-br) by extensions ['ros'] +[1.005s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pt-br) by extension 'ros' +[1.005s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pt-br) by extensions ['cmake', 'python'] +[1.005s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pt-br) by extension 'cmake' +[1.006s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pt-br) by extension 'python' +[1.006s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pt-br) by extensions ['python_setup_py'] +[1.006s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/pt-br) by extension 'python_setup_py' +[1.007s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ru) by extensions ['ignore', 'ignore_ament_install'] +[1.007s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ru) by extension 'ignore' +[1.007s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ru) by extension 'ignore_ament_install' +[1.008s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ru) by extensions ['colcon_pkg'] +[1.008s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ru) by extension 'colcon_pkg' +[1.008s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ru) by extensions ['colcon_meta'] +[1.008s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ru) by extension 'colcon_meta' +[1.008s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ru) by extensions ['ros'] +[1.008s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ru) by extension 'ros' +[1.009s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ru) by extensions ['cmake', 'python'] +[1.009s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ru) by extension 'cmake' +[1.009s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ru) by extension 'python' +[1.009s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ru) by extensions ['python_setup_py'] +[1.010s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/ru) by extension 'python_setup_py' +[1.010s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/tr) by extensions ['ignore', 'ignore_ament_install'] +[1.011s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/tr) by extension 'ignore' +[1.011s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/tr) by extension 'ignore_ament_install' +[1.011s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/tr) by extensions ['colcon_pkg'] +[1.012s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/tr) by extension 'colcon_pkg' +[1.012s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/tr) by extensions ['colcon_meta'] +[1.012s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/tr) by extension 'colcon_meta' +[1.012s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/tr) by extensions ['ros'] +[1.012s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/tr) by extension 'ros' +[1.013s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/tr) by extensions ['cmake', 'python'] +[1.013s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/tr) by extension 'cmake' +[1.013s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/tr) by extension 'python' +[1.013s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/tr) by extensions ['python_setup_py'] +[1.014s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/tr) by extension 'python_setup_py' +[1.015s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-cn) by extensions ['ignore', 'ignore_ament_install'] +[1.015s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-cn) by extension 'ignore' +[1.016s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-cn) by extension 'ignore_ament_install' +[1.016s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-cn) by extensions ['colcon_pkg'] +[1.016s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-cn) by extension 'colcon_pkg' +[1.016s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-cn) by extensions ['colcon_meta'] +[1.016s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-cn) by extension 'colcon_meta' +[1.017s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-cn) by extensions ['ros'] +[1.017s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-cn) by extension 'ros' +[1.017s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-cn) by extensions ['cmake', 'python'] +[1.017s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-cn) by extension 'cmake' +[1.018s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-cn) by extension 'python' +[1.018s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-cn) by extensions ['python_setup_py'] +[1.018s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-cn) by extension 'python_setup_py' +[1.019s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-tw) by extensions ['ignore', 'ignore_ament_install'] +[1.019s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-tw) by extension 'ignore' +[1.019s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-tw) by extension 'ignore_ament_install' +[1.020s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-tw) by extensions ['colcon_pkg'] +[1.020s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-tw) by extension 'colcon_pkg' +[1.020s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-tw) by extensions ['colcon_meta'] +[1.020s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-tw) by extension 'colcon_meta' +[1.020s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-tw) by extensions ['ros'] +[1.020s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-tw) by extension 'ros' +[1.021s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-tw) by extensions ['cmake', 'python'] +[1.021s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-tw) by extension 'cmake' +[1.021s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-tw) by extension 'python' +[1.021s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-tw) by extensions ['python_setup_py'] +[1.021s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/typescript/lib/zh-tw) by extension 'python_setup_py' +[1.022s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/undici-types) by extensions ['ignore', 'ignore_ament_install'] +[1.022s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/undici-types) by extension 'ignore' +[1.022s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/undici-types) by extension 'ignore_ament_install' +[1.022s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/undici-types) by extensions ['colcon_pkg'] +[1.023s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/undici-types) by extension 'colcon_pkg' +[1.023s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/undici-types) by extensions ['colcon_meta'] +[1.023s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/undici-types) by extension 'colcon_meta' +[1.023s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/undici-types) by extensions ['ros'] +[1.023s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/undici-types) by extension 'ros' +[1.023s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/undici-types) by extensions ['cmake', 'python'] +[1.023s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/undici-types) by extension 'cmake' +[1.023s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/undici-types) by extension 'python' +[1.023s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/undici-types) by extensions ['python_setup_py'] +[1.024s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/undici-types) by extension 'python_setup_py' +[1.024s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc) by extensions ['ignore', 'ignore_ament_install'] +[1.025s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc) by extension 'ignore' +[1.025s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc) by extension 'ignore_ament_install' +[1.025s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc) by extensions ['colcon_pkg'] +[1.025s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc) by extension 'colcon_pkg' +[1.025s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc) by extensions ['colcon_meta'] +[1.025s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc) by extension 'colcon_meta' +[1.026s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc) by extensions ['ros'] +[1.026s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc) by extension 'ros' +[1.026s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc) by extensions ['cmake', 'python'] +[1.026s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc) by extension 'cmake' +[1.026s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc) by extension 'python' +[1.026s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc) by extensions ['python_setup_py'] +[1.026s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc) by extension 'python_setup_py' +[1.027s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib) by extensions ['ignore', 'ignore_ament_install'] +[1.028s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib) by extension 'ignore' +[1.028s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib) by extension 'ignore_ament_install' +[1.029s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib) by extensions ['colcon_pkg'] +[1.029s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib) by extension 'colcon_pkg' +[1.029s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib) by extensions ['colcon_meta'] +[1.029s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib) by extension 'colcon_meta' +[1.029s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib) by extensions ['ros'] +[1.030s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib) by extension 'ros' +[1.030s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib) by extensions ['cmake', 'python'] +[1.030s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib) by extension 'cmake' +[1.030s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib) by extension 'python' +[1.030s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib) by extensions ['python_setup_py'] +[1.031s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib) by extension 'python_setup_py' +[1.032s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/browser) by extensions ['ignore', 'ignore_ament_install'] +[1.032s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/browser) by extension 'ignore' +[1.032s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/browser) by extension 'ignore_ament_install' +[1.033s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/browser) by extensions ['colcon_pkg'] +[1.033s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/browser) by extension 'colcon_pkg' +[1.033s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/browser) by extensions ['colcon_meta'] +[1.033s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/browser) by extension 'colcon_meta' +[1.033s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/browser) by extensions ['ros'] +[1.033s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/browser) by extension 'ros' +[1.034s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/browser) by extensions ['cmake', 'python'] +[1.034s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/browser) by extension 'cmake' +[1.034s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/browser) by extension 'python' +[1.034s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/browser) by extensions ['python_setup_py'] +[1.034s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/browser) by extension 'python_setup_py' +[1.035s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/common) by extensions ['ignore', 'ignore_ament_install'] +[1.035s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/common) by extension 'ignore' +[1.036s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/common) by extension 'ignore_ament_install' +[1.036s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/common) by extensions ['colcon_pkg'] +[1.036s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/common) by extension 'colcon_pkg' +[1.036s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/common) by extensions ['colcon_meta'] +[1.036s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/common) by extension 'colcon_meta' +[1.037s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/common) by extensions ['ros'] +[1.037s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/common) by extension 'ros' +[1.037s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/common) by extensions ['cmake', 'python'] +[1.037s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/common) by extension 'cmake' +[1.037s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/common) by extension 'python' +[1.037s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/common) by extensions ['python_setup_py'] +[1.037s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/common) by extension 'python_setup_py' +[1.038s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/node) by extensions ['ignore', 'ignore_ament_install'] +[1.039s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/node) by extension 'ignore' +[1.039s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/node) by extension 'ignore_ament_install' +[1.040s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/node) by extensions ['colcon_pkg'] +[1.040s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/node) by extension 'colcon_pkg' +[1.040s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/node) by extensions ['colcon_meta'] +[1.040s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/node) by extension 'colcon_meta' +[1.041s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/node) by extensions ['ros'] +[1.041s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/node) by extension 'ros' +[1.041s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/node) by extensions ['cmake', 'python'] +[1.042s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/node) by extension 'cmake' +[1.042s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/node) by extension 'python' +[1.042s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/node) by extensions ['python_setup_py'] +[1.042s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/lib/node) by extension 'python_setup_py' +[1.043s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/typings) by extensions ['ignore', 'ignore_ament_install'] +[1.044s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/typings) by extension 'ignore' +[1.044s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/typings) by extension 'ignore_ament_install' +[1.045s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/typings) by extensions ['colcon_pkg'] +[1.045s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/typings) by extension 'colcon_pkg' +[1.045s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/typings) by extensions ['colcon_meta'] +[1.045s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/typings) by extension 'colcon_meta' +[1.045s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/typings) by extensions ['ros'] +[1.046s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/typings) by extension 'ros' +[1.046s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/typings) by extensions ['cmake', 'python'] +[1.047s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/typings) by extension 'cmake' +[1.047s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/typings) by extension 'python' +[1.047s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/typings) by extensions ['python_setup_py'] +[1.047s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-jsonrpc/typings) by extension 'python_setup_py' +[1.048s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient) by extensions ['ignore', 'ignore_ament_install'] +[1.048s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient) by extension 'ignore' +[1.049s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient) by extension 'ignore_ament_install' +[1.049s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient) by extensions ['colcon_pkg'] +[1.049s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient) by extension 'colcon_pkg' +[1.049s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient) by extensions ['colcon_meta'] +[1.050s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient) by extension 'colcon_meta' +[1.050s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient) by extensions ['ros'] +[1.050s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient) by extension 'ros' +[1.050s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient) by extensions ['cmake', 'python'] +[1.050s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient) by extension 'cmake' +[1.050s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient) by extension 'python' +[1.050s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient) by extensions ['python_setup_py'] +[1.050s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient) by extension 'python_setup_py' +[1.051s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib) by extensions ['ignore', 'ignore_ament_install'] +[1.051s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib) by extension 'ignore' +[1.051s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib) by extension 'ignore_ament_install' +[1.052s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib) by extensions ['colcon_pkg'] +[1.052s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib) by extension 'colcon_pkg' +[1.052s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib) by extensions ['colcon_meta'] +[1.052s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib) by extension 'colcon_meta' +[1.052s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib) by extensions ['ros'] +[1.052s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib) by extension 'ros' +[1.053s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib) by extensions ['cmake', 'python'] +[1.053s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib) by extension 'cmake' +[1.053s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib) by extension 'python' +[1.053s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib) by extensions ['python_setup_py'] +[1.053s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib) by extension 'python_setup_py' +[1.054s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/browser) by extensions ['ignore', 'ignore_ament_install'] +[1.054s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/browser) by extension 'ignore' +[1.055s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/browser) by extension 'ignore_ament_install' +[1.056s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/browser) by extensions ['colcon_pkg'] +[1.056s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/browser) by extension 'colcon_pkg' +[1.056s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/browser) by extensions ['colcon_meta'] +[1.056s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/browser) by extension 'colcon_meta' +[1.057s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/browser) by extensions ['ros'] +[1.057s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/browser) by extension 'ros' +[1.057s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/browser) by extensions ['cmake', 'python'] +[1.057s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/browser) by extension 'cmake' +[1.057s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/browser) by extension 'python' +[1.057s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/browser) by extensions ['python_setup_py'] +[1.057s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/browser) by extension 'python_setup_py' +[1.058s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common) by extensions ['ignore', 'ignore_ament_install'] +[1.058s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common) by extension 'ignore' +[1.059s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common) by extension 'ignore_ament_install' +[1.059s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common) by extensions ['colcon_pkg'] +[1.059s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common) by extension 'colcon_pkg' +[1.059s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common) by extensions ['colcon_meta'] +[1.059s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common) by extension 'colcon_meta' +[1.059s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common) by extensions ['ros'] +[1.059s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common) by extension 'ros' +[1.060s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common) by extensions ['cmake', 'python'] +[1.060s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common) by extension 'cmake' +[1.060s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common) by extension 'python' +[1.060s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common) by extensions ['python_setup_py'] +[1.060s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common) by extension 'python_setup_py' +[1.061s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common/utils) by extensions ['ignore', 'ignore_ament_install'] +[1.061s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common/utils) by extension 'ignore' +[1.062s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common/utils) by extension 'ignore_ament_install' +[1.062s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common/utils) by extensions ['colcon_pkg'] +[1.062s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common/utils) by extension 'colcon_pkg' +[1.062s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common/utils) by extensions ['colcon_meta'] +[1.062s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common/utils) by extension 'colcon_meta' +[1.062s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common/utils) by extensions ['ros'] +[1.062s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common/utils) by extension 'ros' +[1.063s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common/utils) by extensions ['cmake', 'python'] +[1.063s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common/utils) by extension 'cmake' +[1.063s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common/utils) by extension 'python' +[1.063s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common/utils) by extensions ['python_setup_py'] +[1.063s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/common/utils) by extension 'python_setup_py' +[1.064s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/node) by extensions ['ignore', 'ignore_ament_install'] +[1.065s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/node) by extension 'ignore' +[1.065s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/node) by extension 'ignore_ament_install' +[1.066s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/node) by extensions ['colcon_pkg'] +[1.066s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/node) by extension 'colcon_pkg' +[1.067s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/node) by extensions ['colcon_meta'] +[1.067s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/node) by extension 'colcon_meta' +[1.067s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/node) by extensions ['ros'] +[1.067s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/node) by extension 'ros' +[1.068s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/node) by extensions ['cmake', 'python'] +[1.068s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/node) by extension 'cmake' +[1.068s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/node) by extension 'python' +[1.068s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/node) by extensions ['python_setup_py'] +[1.068s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageclient/lib/node) by extension 'python_setup_py' +[1.069s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol) by extensions ['ignore', 'ignore_ament_install'] +[1.070s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol) by extension 'ignore' +[1.070s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol) by extension 'ignore_ament_install' +[1.070s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol) by extensions ['colcon_pkg'] +[1.070s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol) by extension 'colcon_pkg' +[1.070s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol) by extensions ['colcon_meta'] +[1.070s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol) by extension 'colcon_meta' +[1.071s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol) by extensions ['ros'] +[1.071s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol) by extension 'ros' +[1.071s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol) by extensions ['cmake', 'python'] +[1.071s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol) by extension 'cmake' +[1.071s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol) by extension 'python' +[1.071s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol) by extensions ['python_setup_py'] +[1.071s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol) by extension 'python_setup_py' +[1.072s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib) by extensions ['ignore', 'ignore_ament_install'] +[1.073s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib) by extension 'ignore' +[1.073s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib) by extension 'ignore_ament_install' +[1.074s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib) by extensions ['colcon_pkg'] +[1.074s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib) by extension 'colcon_pkg' +[1.074s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib) by extensions ['colcon_meta'] +[1.074s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib) by extension 'colcon_meta' +[1.075s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib) by extensions ['ros'] +[1.075s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib) by extension 'ros' +[1.076s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib) by extensions ['cmake', 'python'] +[1.076s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib) by extension 'cmake' +[1.076s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib) by extension 'python' +[1.076s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib) by extensions ['python_setup_py'] +[1.076s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib) by extension 'python_setup_py' +[1.077s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/browser) by extensions ['ignore', 'ignore_ament_install'] +[1.078s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/browser) by extension 'ignore' +[1.078s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/browser) by extension 'ignore_ament_install' +[1.079s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/browser) by extensions ['colcon_pkg'] +[1.079s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/browser) by extension 'colcon_pkg' +[1.079s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/browser) by extensions ['colcon_meta'] +[1.079s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/browser) by extension 'colcon_meta' +[1.079s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/browser) by extensions ['ros'] +[1.079s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/browser) by extension 'ros' +[1.080s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/browser) by extensions ['cmake', 'python'] +[1.080s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/browser) by extension 'cmake' +[1.080s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/browser) by extension 'python' +[1.080s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/browser) by extensions ['python_setup_py'] +[1.081s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/browser) by extension 'python_setup_py' +[1.082s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common) by extensions ['ignore', 'ignore_ament_install'] +[1.082s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common) by extension 'ignore' +[1.083s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common) by extension 'ignore_ament_install' +[1.083s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common) by extensions ['colcon_pkg'] +[1.083s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common) by extension 'colcon_pkg' +[1.083s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common) by extensions ['colcon_meta'] +[1.083s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common) by extension 'colcon_meta' +[1.084s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common) by extensions ['ros'] +[1.084s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common) by extension 'ros' +[1.085s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common) by extensions ['cmake', 'python'] +[1.085s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common) by extension 'cmake' +[1.085s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common) by extension 'python' +[1.085s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common) by extensions ['python_setup_py'] +[1.086s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common) by extension 'python_setup_py' +[1.086s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common/utils) by extensions ['ignore', 'ignore_ament_install'] +[1.087s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common/utils) by extension 'ignore' +[1.087s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common/utils) by extension 'ignore_ament_install' +[1.087s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common/utils) by extensions ['colcon_pkg'] +[1.087s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common/utils) by extension 'colcon_pkg' +[1.087s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common/utils) by extensions ['colcon_meta'] +[1.087s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common/utils) by extension 'colcon_meta' +[1.088s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common/utils) by extensions ['ros'] +[1.088s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common/utils) by extension 'ros' +[1.088s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common/utils) by extensions ['cmake', 'python'] +[1.088s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common/utils) by extension 'cmake' +[1.088s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common/utils) by extension 'python' +[1.088s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common/utils) by extensions ['python_setup_py'] +[1.088s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/common/utils) by extension 'python_setup_py' +[1.089s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/node) by extensions ['ignore', 'ignore_ament_install'] +[1.090s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/node) by extension 'ignore' +[1.090s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/node) by extension 'ignore_ament_install' +[1.090s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/node) by extensions ['colcon_pkg'] +[1.091s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/node) by extension 'colcon_pkg' +[1.091s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/node) by extensions ['colcon_meta'] +[1.091s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/node) by extension 'colcon_meta' +[1.091s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/node) by extensions ['ros'] +[1.091s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/node) by extension 'ros' +[1.091s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/node) by extensions ['cmake', 'python'] +[1.092s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/node) by extension 'cmake' +[1.092s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/node) by extension 'python' +[1.092s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/node) by extensions ['python_setup_py'] +[1.092s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-protocol/lib/node) by extension 'python_setup_py' +[1.093s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types) by extensions ['ignore', 'ignore_ament_install'] +[1.093s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types) by extension 'ignore' +[1.094s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types) by extension 'ignore_ament_install' +[1.094s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types) by extensions ['colcon_pkg'] +[1.094s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types) by extension 'colcon_pkg' +[1.094s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types) by extensions ['colcon_meta'] +[1.094s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types) by extension 'colcon_meta' +[1.094s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types) by extensions ['ros'] +[1.095s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types) by extension 'ros' +[1.095s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types) by extensions ['cmake', 'python'] +[1.095s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types) by extension 'cmake' +[1.095s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types) by extension 'python' +[1.095s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types) by extensions ['python_setup_py'] +[1.095s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types) by extension 'python_setup_py' +[1.096s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib) by extensions ['ignore', 'ignore_ament_install'] +[1.097s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib) by extension 'ignore' +[1.097s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib) by extension 'ignore_ament_install' +[1.097s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib) by extensions ['colcon_pkg'] +[1.097s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib) by extension 'colcon_pkg' +[1.098s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib) by extensions ['colcon_meta'] +[1.098s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib) by extension 'colcon_meta' +[1.098s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib) by extensions ['ros'] +[1.098s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib) by extension 'ros' +[1.099s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib) by extensions ['cmake', 'python'] +[1.099s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib) by extension 'cmake' +[1.099s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib) by extension 'python' +[1.099s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib) by extensions ['python_setup_py'] +[1.099s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib) by extension 'python_setup_py' +[1.100s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/esm) by extensions ['ignore', 'ignore_ament_install'] +[1.101s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/esm) by extension 'ignore' +[1.101s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/esm) by extension 'ignore_ament_install' +[1.102s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/esm) by extensions ['colcon_pkg'] +[1.102s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/esm) by extension 'colcon_pkg' +[1.102s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/esm) by extensions ['colcon_meta'] +[1.102s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/esm) by extension 'colcon_meta' +[1.102s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/esm) by extensions ['ros'] +[1.102s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/esm) by extension 'ros' +[1.103s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/esm) by extensions ['cmake', 'python'] +[1.103s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/esm) by extension 'cmake' +[1.103s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/esm) by extension 'python' +[1.103s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/esm) by extensions ['python_setup_py'] +[1.103s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/esm) by extension 'python_setup_py' +[1.104s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/umd) by extensions ['ignore', 'ignore_ament_install'] +[1.104s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/umd) by extension 'ignore' +[1.105s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/umd) by extension 'ignore_ament_install' +[1.106s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/umd) by extensions ['colcon_pkg'] +[1.106s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/umd) by extension 'colcon_pkg' +[1.106s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/umd) by extensions ['colcon_meta'] +[1.106s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/umd) by extension 'colcon_meta' +[1.107s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/umd) by extensions ['ros'] +[1.107s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/umd) by extension 'ros' +[1.107s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/umd) by extensions ['cmake', 'python'] +[1.108s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/umd) by extension 'cmake' +[1.108s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/umd) by extension 'python' +[1.108s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/umd) by extensions ['python_setup_py'] +[1.108s] Level 1:colcon.colcon_core.package_identification:_identify(client/node_modules/vscode-languageserver-types/lib/umd) by extension 'python_setup_py' +[1.109s] Level 1:colcon.colcon_core.package_identification:_identify(client/out) by extensions ['ignore', 'ignore_ament_install'] +[1.110s] Level 1:colcon.colcon_core.package_identification:_identify(client/out) by extension 'ignore' +[1.110s] Level 1:colcon.colcon_core.package_identification:_identify(client/out) by extension 'ignore_ament_install' +[1.110s] Level 1:colcon.colcon_core.package_identification:_identify(client/out) by extensions ['colcon_pkg'] +[1.111s] Level 1:colcon.colcon_core.package_identification:_identify(client/out) by extension 'colcon_pkg' +[1.111s] Level 1:colcon.colcon_core.package_identification:_identify(client/out) by extensions ['colcon_meta'] +[1.111s] Level 1:colcon.colcon_core.package_identification:_identify(client/out) by extension 'colcon_meta' +[1.112s] Level 1:colcon.colcon_core.package_identification:_identify(client/out) by extensions ['ros'] +[1.112s] Level 1:colcon.colcon_core.package_identification:_identify(client/out) by extension 'ros' +[1.112s] Level 1:colcon.colcon_core.package_identification:_identify(client/out) by extensions ['cmake', 'python'] +[1.113s] Level 1:colcon.colcon_core.package_identification:_identify(client/out) by extension 'cmake' +[1.113s] Level 1:colcon.colcon_core.package_identification:_identify(client/out) by extension 'python' +[1.113s] Level 1:colcon.colcon_core.package_identification:_identify(client/out) by extensions ['python_setup_py'] +[1.113s] Level 1:colcon.colcon_core.package_identification:_identify(client/out) by extension 'python_setup_py' +[1.114s] Level 1:colcon.colcon_core.package_identification:_identify(client/src) by extensions ['ignore', 'ignore_ament_install'] +[1.114s] Level 1:colcon.colcon_core.package_identification:_identify(client/src) by extension 'ignore' +[1.114s] Level 1:colcon.colcon_core.package_identification:_identify(client/src) by extension 'ignore_ament_install' +[1.115s] Level 1:colcon.colcon_core.package_identification:_identify(client/src) by extensions ['colcon_pkg'] +[1.115s] Level 1:colcon.colcon_core.package_identification:_identify(client/src) by extension 'colcon_pkg' +[1.115s] Level 1:colcon.colcon_core.package_identification:_identify(client/src) by extensions ['colcon_meta'] +[1.115s] Level 1:colcon.colcon_core.package_identification:_identify(client/src) by extension 'colcon_meta' +[1.115s] Level 1:colcon.colcon_core.package_identification:_identify(client/src) by extensions ['ros'] +[1.116s] Level 1:colcon.colcon_core.package_identification:_identify(client/src) by extension 'ros' +[1.116s] Level 1:colcon.colcon_core.package_identification:_identify(client/src) by extensions ['cmake', 'python'] +[1.116s] Level 1:colcon.colcon_core.package_identification:_identify(client/src) by extension 'cmake' +[1.116s] Level 1:colcon.colcon_core.package_identification:_identify(client/src) by extension 'python' +[1.116s] Level 1:colcon.colcon_core.package_identification:_identify(client/src) by extensions ['python_setup_py'] +[1.117s] Level 1:colcon.colcon_core.package_identification:_identify(client/src) by extension 'python_setup_py' +[1.117s] Level 1:colcon.colcon_core.package_identification:_identify(examples) by extensions ['ignore', 'ignore_ament_install'] +[1.117s] Level 1:colcon.colcon_core.package_identification:_identify(examples) by extension 'ignore' +[1.117s] Level 1:colcon.colcon_core.package_identification:_identify(examples) by extension 'ignore_ament_install' +[1.118s] Level 1:colcon.colcon_core.package_identification:_identify(examples) by extensions ['colcon_pkg'] +[1.118s] Level 1:colcon.colcon_core.package_identification:_identify(examples) by extension 'colcon_pkg' +[1.118s] Level 1:colcon.colcon_core.package_identification:_identify(examples) by extensions ['colcon_meta'] +[1.118s] Level 1:colcon.colcon_core.package_identification:_identify(examples) by extension 'colcon_meta' +[1.118s] Level 1:colcon.colcon_core.package_identification:_identify(examples) by extensions ['ros'] +[1.118s] Level 1:colcon.colcon_core.package_identification:_identify(examples) by extension 'ros' +[1.118s] Level 1:colcon.colcon_core.package_identification:_identify(examples) by extensions ['cmake', 'python'] +[1.118s] Level 1:colcon.colcon_core.package_identification:_identify(examples) by extension 'cmake' +[1.118s] Level 1:colcon.colcon_core.package_identification:_identify(examples) by extension 'python' +[1.119s] Level 1:colcon.colcon_core.package_identification:_identify(examples) by extensions ['python_setup_py'] +[1.119s] Level 1:colcon.colcon_core.package_identification:_identify(examples) by extension 'python_setup_py' +[1.119s] Level 1:colcon.colcon_core.package_identification:_identify(img) by extensions ['ignore', 'ignore_ament_install'] +[1.119s] Level 1:colcon.colcon_core.package_identification:_identify(img) by extension 'ignore' +[1.119s] Level 1:colcon.colcon_core.package_identification:_identify(img) by extension 'ignore_ament_install' +[1.120s] Level 1:colcon.colcon_core.package_identification:_identify(img) by extensions ['colcon_pkg'] +[1.120s] Level 1:colcon.colcon_core.package_identification:_identify(img) by extension 'colcon_pkg' +[1.120s] Level 1:colcon.colcon_core.package_identification:_identify(img) by extensions ['colcon_meta'] +[1.120s] Level 1:colcon.colcon_core.package_identification:_identify(img) by extension 'colcon_meta' +[1.120s] Level 1:colcon.colcon_core.package_identification:_identify(img) by extensions ['ros'] +[1.120s] Level 1:colcon.colcon_core.package_identification:_identify(img) by extension 'ros' +[1.120s] Level 1:colcon.colcon_core.package_identification:_identify(img) by extensions ['cmake', 'python'] +[1.120s] Level 1:colcon.colcon_core.package_identification:_identify(img) by extension 'cmake' +[1.120s] Level 1:colcon.colcon_core.package_identification:_identify(img) by extension 'python' +[1.120s] Level 1:colcon.colcon_core.package_identification:_identify(img) by extensions ['python_setup_py'] +[1.120s] Level 1:colcon.colcon_core.package_identification:_identify(img) by extension 'python_setup_py' +[1.121s] Level 1:colcon.colcon_core.package_identification:_identify(install) by extensions ['ignore', 'ignore_ament_install'] +[1.121s] Level 1:colcon.colcon_core.package_identification:_identify(install) by extension 'ignore' +[1.122s] Level 1:colcon.colcon_core.package_identification:_identify(install) ignored +[1.122s] Level 1:colcon.colcon_core.package_identification:_identify(log) by extensions ['ignore', 'ignore_ament_install'] +[1.123s] Level 1:colcon.colcon_core.package_identification:_identify(log) by extension 'ignore' +[1.123s] Level 1:colcon.colcon_core.package_identification:_identify(log) ignored +[1.123s] Level 1:colcon.colcon_core.package_identification:_identify(server) by extensions ['ignore', 'ignore_ament_install'] +[1.124s] Level 1:colcon.colcon_core.package_identification:_identify(server) by extension 'ignore' +[1.124s] Level 1:colcon.colcon_core.package_identification:_identify(server) by extension 'ignore_ament_install' +[1.124s] Level 1:colcon.colcon_core.package_identification:_identify(server) by extensions ['colcon_pkg'] +[1.124s] Level 1:colcon.colcon_core.package_identification:_identify(server) by extension 'colcon_pkg' +[1.125s] Level 1:colcon.colcon_core.package_identification:_identify(server) by extensions ['colcon_meta'] +[1.125s] Level 1:colcon.colcon_core.package_identification:_identify(server) by extension 'colcon_meta' +[1.125s] Level 1:colcon.colcon_core.package_identification:_identify(server) by extensions ['ros'] +[1.125s] Level 1:colcon.colcon_core.package_identification:_identify(server) by extension 'ros' +[1.126s] Level 1:colcon.colcon_core.package_identification:_identify(server) by extensions ['cmake', 'python'] +[1.126s] Level 1:colcon.colcon_core.package_identification:_identify(server) by extension 'cmake' +[1.126s] Level 1:colcon.colcon_core.package_identification:_identify(server) by extension 'python' +[1.126s] Level 1:colcon.colcon_core.package_identification:_identify(server) by extensions ['python_setup_py'] +[1.126s] Level 1:colcon.colcon_core.package_identification:_identify(server) by extension 'python_setup_py' +[1.128s] Level 1:colcon.colcon_core.package_identification:_identify(server/bin) by extensions ['ignore', 'ignore_ament_install'] +[1.128s] Level 1:colcon.colcon_core.package_identification:_identify(server/bin) by extension 'ignore' +[1.129s] Level 1:colcon.colcon_core.package_identification:_identify(server/bin) by extension 'ignore_ament_install' +[1.129s] Level 1:colcon.colcon_core.package_identification:_identify(server/bin) by extensions ['colcon_pkg'] +[1.129s] Level 1:colcon.colcon_core.package_identification:_identify(server/bin) by extension 'colcon_pkg' +[1.129s] Level 1:colcon.colcon_core.package_identification:_identify(server/bin) by extensions ['colcon_meta'] +[1.130s] Level 1:colcon.colcon_core.package_identification:_identify(server/bin) by extension 'colcon_meta' +[1.130s] Level 1:colcon.colcon_core.package_identification:_identify(server/bin) by extensions ['ros'] +[1.130s] Level 1:colcon.colcon_core.package_identification:_identify(server/bin) by extension 'ros' +[1.130s] Level 1:colcon.colcon_core.package_identification:_identify(server/bin) by extensions ['cmake', 'python'] +[1.131s] Level 1:colcon.colcon_core.package_identification:_identify(server/bin) by extension 'cmake' +[1.131s] Level 1:colcon.colcon_core.package_identification:_identify(server/bin) by extension 'python' +[1.131s] Level 1:colcon.colcon_core.package_identification:_identify(server/bin) by extensions ['python_setup_py'] +[1.131s] Level 1:colcon.colcon_core.package_identification:_identify(server/bin) by extension 'python_setup_py' +[1.132s] Level 1:colcon.colcon_core.package_identification:_identify(server/src) by extensions ['ignore', 'ignore_ament_install'] +[1.132s] Level 1:colcon.colcon_core.package_identification:_identify(server/src) by extension 'ignore' +[1.132s] Level 1:colcon.colcon_core.package_identification:_identify(server/src) by extension 'ignore_ament_install' +[1.132s] Level 1:colcon.colcon_core.package_identification:_identify(server/src) by extensions ['colcon_pkg'] +[1.133s] Level 1:colcon.colcon_core.package_identification:_identify(server/src) by extension 'colcon_pkg' +[1.133s] Level 1:colcon.colcon_core.package_identification:_identify(server/src) by extensions ['colcon_meta'] +[1.133s] Level 1:colcon.colcon_core.package_identification:_identify(server/src) by extension 'colcon_meta' +[1.133s] Level 1:colcon.colcon_core.package_identification:_identify(server/src) by extensions ['ros'] +[1.133s] Level 1:colcon.colcon_core.package_identification:_identify(server/src) by extension 'ros' +[1.134s] Level 1:colcon.colcon_core.package_identification:_identify(server/src) by extensions ['cmake', 'python'] +[1.134s] Level 1:colcon.colcon_core.package_identification:_identify(server/src) by extension 'cmake' +[1.134s] Level 1:colcon.colcon_core.package_identification:_identify(server/src) by extension 'python' +[1.134s] Level 1:colcon.colcon_core.package_identification:_identify(server/src) by extensions ['python_setup_py'] +[1.134s] Level 1:colcon.colcon_core.package_identification:_identify(server/src) by extension 'python_setup_py' +[1.135s] Level 1:colcon.colcon_core.package_identification:_identify(server/target) by extensions ['ignore', 'ignore_ament_install'] +[1.136s] Level 1:colcon.colcon_core.package_identification:_identify(server/target) by extension 'ignore' +[1.136s] Level 1:colcon.colcon_core.package_identification:_identify(server/target) by extension 'ignore_ament_install' +[1.136s] Level 1:colcon.colcon_core.package_identification:_identify(server/target) by extensions ['colcon_pkg'] +[1.136s] Level 1:colcon.colcon_core.package_identification:_identify(server/target) by extension 'colcon_pkg' +[1.137s] Level 1:colcon.colcon_core.package_identification:_identify(server/target) by extensions ['colcon_meta'] +[1.137s] Level 1:colcon.colcon_core.package_identification:_identify(server/target) by extension 'colcon_meta' +[1.137s] Level 1:colcon.colcon_core.package_identification:_identify(server/target) by extensions ['ros'] +[1.137s] Level 1:colcon.colcon_core.package_identification:_identify(server/target) by extension 'ros' +[1.138s] Level 1:colcon.colcon_core.package_identification:_identify(server/target) by extensions ['cmake', 'python'] +[1.138s] Level 1:colcon.colcon_core.package_identification:_identify(server/target) by extension 'cmake' +[1.138s] Level 1:colcon.colcon_core.package_identification:_identify(server/target) by extension 'python' +[1.138s] Level 1:colcon.colcon_core.package_identification:_identify(server/target) by extensions ['python_setup_py'] +[1.138s] Level 1:colcon.colcon_core.package_identification:_identify(server/target) by extension 'python_setup_py' +[1.139s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug) by extensions ['ignore', 'ignore_ament_install'] +[1.140s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug) by extension 'ignore' +[1.140s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug) by extension 'ignore_ament_install' +[1.141s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug) by extensions ['colcon_pkg'] +[1.141s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug) by extension 'colcon_pkg' +[1.141s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug) by extensions ['colcon_meta'] +[1.141s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug) by extension 'colcon_meta' +[1.141s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug) by extensions ['ros'] +[1.141s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug) by extension 'ros' +[1.142s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug) by extensions ['cmake', 'python'] +[1.142s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug) by extension 'cmake' +[1.142s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug) by extension 'python' +[1.142s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug) by extensions ['python_setup_py'] +[1.142s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug) by extension 'python_setup_py' +[1.144s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build) by extensions ['ignore', 'ignore_ament_install'] +[1.144s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build) by extension 'ignore' +[1.145s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build) by extension 'ignore_ament_install' +[1.145s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build) by extensions ['colcon_pkg'] +[1.145s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build) by extension 'colcon_pkg' +[1.146s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build) by extensions ['colcon_meta'] +[1.146s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build) by extension 'colcon_meta' +[1.146s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build) by extensions ['ros'] +[1.146s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build) by extension 'ros' +[1.147s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build) by extensions ['cmake', 'python'] +[1.147s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build) by extension 'cmake' +[1.147s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build) by extension 'python' +[1.147s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build) by extensions ['python_setup_py'] +[1.147s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build) by extension 'python_setup_py' +[1.149s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-250f170fb9b8abf6) by extensions ['ignore', 'ignore_ament_install'] +[1.149s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-250f170fb9b8abf6) by extension 'ignore' +[1.150s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-250f170fb9b8abf6) by extension 'ignore_ament_install' +[1.150s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-250f170fb9b8abf6) by extensions ['colcon_pkg'] +[1.150s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-250f170fb9b8abf6) by extension 'colcon_pkg' +[1.150s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-250f170fb9b8abf6) by extensions ['colcon_meta'] +[1.150s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-250f170fb9b8abf6) by extension 'colcon_meta' +[1.150s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-250f170fb9b8abf6) by extensions ['ros'] +[1.151s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-250f170fb9b8abf6) by extension 'ros' +[1.151s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-250f170fb9b8abf6) by extensions ['cmake', 'python'] +[1.151s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-250f170fb9b8abf6) by extension 'cmake' +[1.151s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-250f170fb9b8abf6) by extension 'python' +[1.151s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-250f170fb9b8abf6) by extensions ['python_setup_py'] +[1.151s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-250f170fb9b8abf6) by extension 'python_setup_py' +[1.152s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e) by extensions ['ignore', 'ignore_ament_install'] +[1.152s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e) by extension 'ignore' +[1.152s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e) by extension 'ignore_ament_install' +[1.153s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e) by extensions ['colcon_pkg'] +[1.153s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e) by extension 'colcon_pkg' +[1.153s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e) by extensions ['colcon_meta'] +[1.153s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e) by extension 'colcon_meta' +[1.153s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e) by extensions ['ros'] +[1.153s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e) by extension 'ros' +[1.153s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e) by extensions ['cmake', 'python'] +[1.154s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e) by extension 'cmake' +[1.154s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e) by extension 'python' +[1.154s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e) by extensions ['python_setup_py'] +[1.154s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e) by extension 'python_setup_py' +[1.155s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e/out) by extensions ['ignore', 'ignore_ament_install'] +[1.155s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e/out) by extension 'ignore' +[1.156s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e/out) by extension 'ignore_ament_install' +[1.156s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e/out) by extensions ['colcon_pkg'] +[1.156s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e/out) by extension 'colcon_pkg' +[1.156s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e/out) by extensions ['colcon_meta'] +[1.157s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e/out) by extension 'colcon_meta' +[1.157s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e/out) by extensions ['ros'] +[1.157s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e/out) by extension 'ros' +[1.158s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e/out) by extensions ['cmake', 'python'] +[1.158s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e/out) by extension 'cmake' +[1.158s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e/out) by extension 'python' +[1.159s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e/out) by extensions ['python_setup_py'] +[1.159s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-3e83f23c64a7285e/out) by extension 'python_setup_py' +[1.160s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-6deb6021f7dfb7a1) by extensions ['ignore', 'ignore_ament_install'] +[1.161s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-6deb6021f7dfb7a1) by extension 'ignore' +[1.161s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-6deb6021f7dfb7a1) by extension 'ignore_ament_install' +[1.161s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-6deb6021f7dfb7a1) by extensions ['colcon_pkg'] +[1.162s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-6deb6021f7dfb7a1) by extension 'colcon_pkg' +[1.162s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-6deb6021f7dfb7a1) by extensions ['colcon_meta'] +[1.162s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-6deb6021f7dfb7a1) by extension 'colcon_meta' +[1.162s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-6deb6021f7dfb7a1) by extensions ['ros'] +[1.162s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-6deb6021f7dfb7a1) by extension 'ros' +[1.163s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-6deb6021f7dfb7a1) by extensions ['cmake', 'python'] +[1.163s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-6deb6021f7dfb7a1) by extension 'cmake' +[1.163s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-6deb6021f7dfb7a1) by extension 'python' +[1.164s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-6deb6021f7dfb7a1) by extensions ['python_setup_py'] +[1.164s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-6deb6021f7dfb7a1) by extension 'python_setup_py' +[1.164s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb) by extensions ['ignore', 'ignore_ament_install'] +[1.165s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb) by extension 'ignore' +[1.165s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb) by extension 'ignore_ament_install' +[1.165s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb) by extensions ['colcon_pkg'] +[1.165s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb) by extension 'colcon_pkg' +[1.165s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb) by extensions ['colcon_meta'] +[1.166s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb) by extension 'colcon_meta' +[1.166s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb) by extensions ['ros'] +[1.166s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb) by extension 'ros' +[1.166s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb) by extensions ['cmake', 'python'] +[1.166s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb) by extension 'cmake' +[1.166s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb) by extension 'python' +[1.166s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb) by extensions ['python_setup_py'] +[1.167s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb) by extension 'python_setup_py' +[1.167s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb/out) by extensions ['ignore', 'ignore_ament_install'] +[1.167s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb/out) by extension 'ignore' +[1.168s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb/out) by extension 'ignore_ament_install' +[1.168s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb/out) by extensions ['colcon_pkg'] +[1.168s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb/out) by extension 'colcon_pkg' +[1.168s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb/out) by extensions ['colcon_meta'] +[1.168s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb/out) by extension 'colcon_meta' +[1.168s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb/out) by extensions ['ros'] +[1.168s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb/out) by extension 'ros' +[1.169s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb/out) by extensions ['cmake', 'python'] +[1.169s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb/out) by extension 'cmake' +[1.169s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb/out) by extension 'python' +[1.169s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb/out) by extensions ['python_setup_py'] +[1.169s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/httparse-d65c8112d59691fb/out) by extension 'python_setup_py' +[1.170s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea) by extensions ['ignore', 'ignore_ament_install'] +[1.170s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea) by extension 'ignore' +[1.170s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea) by extension 'ignore_ament_install' +[1.170s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea) by extensions ['colcon_pkg'] +[1.171s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea) by extension 'colcon_pkg' +[1.171s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea) by extensions ['colcon_meta'] +[1.171s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea) by extension 'colcon_meta' +[1.171s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea) by extensions ['ros'] +[1.171s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea) by extension 'ros' +[1.171s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea) by extensions ['cmake', 'python'] +[1.171s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea) by extension 'cmake' +[1.172s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea) by extension 'python' +[1.172s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea) by extensions ['python_setup_py'] +[1.172s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea) by extension 'python_setup_py' +[1.173s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea/out) by extensions ['ignore', 'ignore_ament_install'] +[1.173s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea/out) by extension 'ignore' +[1.174s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea/out) by extension 'ignore_ament_install' +[1.174s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea/out) by extensions ['colcon_pkg'] +[1.174s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea/out) by extension 'colcon_pkg' +[1.175s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea/out) by extensions ['colcon_meta'] +[1.175s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea/out) by extension 'colcon_meta' +[1.175s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea/out) by extensions ['ros'] +[1.175s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea/out) by extension 'ros' +[1.176s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea/out) by extensions ['cmake', 'python'] +[1.176s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea/out) by extension 'cmake' +[1.176s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea/out) by extension 'python' +[1.176s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea/out) by extensions ['python_setup_py'] +[1.177s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-00a46a8d48e1ccea/out) by extension 'python_setup_py' +[1.178s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-629e7b17d3f06c66) by extensions ['ignore', 'ignore_ament_install'] +[1.178s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-629e7b17d3f06c66) by extension 'ignore' +[1.179s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-629e7b17d3f06c66) by extension 'ignore_ament_install' +[1.179s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-629e7b17d3f06c66) by extensions ['colcon_pkg'] +[1.179s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-629e7b17d3f06c66) by extension 'colcon_pkg' +[1.180s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-629e7b17d3f06c66) by extensions ['colcon_meta'] +[1.180s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-629e7b17d3f06c66) by extension 'colcon_meta' +[1.180s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-629e7b17d3f06c66) by extensions ['ros'] +[1.180s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-629e7b17d3f06c66) by extension 'ros' +[1.181s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-629e7b17d3f06c66) by extensions ['cmake', 'python'] +[1.181s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-629e7b17d3f06c66) by extension 'cmake' +[1.181s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-629e7b17d3f06c66) by extension 'python' +[1.181s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-629e7b17d3f06c66) by extensions ['python_setup_py'] +[1.181s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-629e7b17d3f06c66) by extension 'python_setup_py' +[1.182s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561) by extensions ['ignore', 'ignore_ament_install'] +[1.182s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561) by extension 'ignore' +[1.183s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561) by extension 'ignore_ament_install' +[1.183s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561) by extensions ['colcon_pkg'] +[1.183s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561) by extension 'colcon_pkg' +[1.183s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561) by extensions ['colcon_meta'] +[1.183s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561) by extension 'colcon_meta' +[1.184s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561) by extensions ['ros'] +[1.184s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561) by extension 'ros' +[1.184s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561) by extensions ['cmake', 'python'] +[1.185s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561) by extension 'cmake' +[1.185s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561) by extension 'python' +[1.185s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561) by extensions ['python_setup_py'] +[1.185s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561) by extension 'python_setup_py' +[1.186s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561/out) by extensions ['ignore', 'ignore_ament_install'] +[1.187s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561/out) by extension 'ignore' +[1.187s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561/out) by extension 'ignore_ament_install' +[1.187s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561/out) by extensions ['colcon_pkg'] +[1.188s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561/out) by extension 'colcon_pkg' +[1.188s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561/out) by extensions ['colcon_meta'] +[1.188s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561/out) by extension 'colcon_meta' +[1.189s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561/out) by extensions ['ros'] +[1.189s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561/out) by extension 'ros' +[1.190s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561/out) by extensions ['cmake', 'python'] +[1.190s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561/out) by extension 'cmake' +[1.190s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561/out) by extension 'python' +[1.190s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561/out) by extensions ['python_setup_py'] +[1.190s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-9b1253cc0e349561/out) by extension 'python_setup_py' +[1.191s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-d34f00b4ff47c57b) by extensions ['ignore', 'ignore_ament_install'] +[1.192s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-d34f00b4ff47c57b) by extension 'ignore' +[1.192s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-d34f00b4ff47c57b) by extension 'ignore_ament_install' +[1.192s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-d34f00b4ff47c57b) by extensions ['colcon_pkg'] +[1.193s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-d34f00b4ff47c57b) by extension 'colcon_pkg' +[1.193s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-d34f00b4ff47c57b) by extensions ['colcon_meta'] +[1.193s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-d34f00b4ff47c57b) by extension 'colcon_meta' +[1.193s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-d34f00b4ff47c57b) by extensions ['ros'] +[1.193s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-d34f00b4ff47c57b) by extension 'ros' +[1.194s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-d34f00b4ff47c57b) by extensions ['cmake', 'python'] +[1.194s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-d34f00b4ff47c57b) by extension 'cmake' +[1.194s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-d34f00b4ff47c57b) by extension 'python' +[1.194s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-d34f00b4ff47c57b) by extensions ['python_setup_py'] +[1.194s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_normalizer_data-d34f00b4ff47c57b) by extension 'python_setup_py' +[1.195s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-b31f7cf22f7663cb) by extensions ['ignore', 'ignore_ament_install'] +[1.196s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-b31f7cf22f7663cb) by extension 'ignore' +[1.196s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-b31f7cf22f7663cb) by extension 'ignore_ament_install' +[1.197s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-b31f7cf22f7663cb) by extensions ['colcon_pkg'] +[1.197s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-b31f7cf22f7663cb) by extension 'colcon_pkg' +[1.197s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-b31f7cf22f7663cb) by extensions ['colcon_meta'] +[1.197s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-b31f7cf22f7663cb) by extension 'colcon_meta' +[1.197s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-b31f7cf22f7663cb) by extensions ['ros'] +[1.198s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-b31f7cf22f7663cb) by extension 'ros' +[1.198s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-b31f7cf22f7663cb) by extensions ['cmake', 'python'] +[1.198s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-b31f7cf22f7663cb) by extension 'cmake' +[1.199s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-b31f7cf22f7663cb) by extension 'python' +[1.199s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-b31f7cf22f7663cb) by extensions ['python_setup_py'] +[1.199s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-b31f7cf22f7663cb) by extension 'python_setup_py' +[1.200s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-c3aa910ab281e626) by extensions ['ignore', 'ignore_ament_install'] +[1.201s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-c3aa910ab281e626) by extension 'ignore' +[1.202s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-c3aa910ab281e626) by extension 'ignore_ament_install' +[1.202s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-c3aa910ab281e626) by extensions ['colcon_pkg'] +[1.202s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-c3aa910ab281e626) by extension 'colcon_pkg' +[1.202s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-c3aa910ab281e626) by extensions ['colcon_meta'] +[1.202s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-c3aa910ab281e626) by extension 'colcon_meta' +[1.203s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-c3aa910ab281e626) by extensions ['ros'] +[1.203s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-c3aa910ab281e626) by extension 'ros' +[1.203s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-c3aa910ab281e626) by extensions ['cmake', 'python'] +[1.203s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-c3aa910ab281e626) by extension 'cmake' +[1.204s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-c3aa910ab281e626) by extension 'python' +[1.204s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-c3aa910ab281e626) by extensions ['python_setup_py'] +[1.204s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-c3aa910ab281e626) by extension 'python_setup_py' +[1.205s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4) by extensions ['ignore', 'ignore_ament_install'] +[1.205s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4) by extension 'ignore' +[1.206s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4) by extension 'ignore_ament_install' +[1.206s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4) by extensions ['colcon_pkg'] +[1.206s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4) by extension 'colcon_pkg' +[1.207s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4) by extensions ['colcon_meta'] +[1.207s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4) by extension 'colcon_meta' +[1.207s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4) by extensions ['ros'] +[1.207s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4) by extension 'ros' +[1.208s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4) by extensions ['cmake', 'python'] +[1.208s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4) by extension 'cmake' +[1.208s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4) by extension 'python' +[1.209s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4) by extensions ['python_setup_py'] +[1.209s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4) by extension 'python_setup_py' +[1.210s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4/out) by extensions ['ignore', 'ignore_ament_install'] +[1.211s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4/out) by extension 'ignore' +[1.211s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4/out) by extension 'ignore_ament_install' +[1.211s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4/out) by extensions ['colcon_pkg'] +[1.212s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4/out) by extension 'colcon_pkg' +[1.212s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4/out) by extensions ['colcon_meta'] +[1.212s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4/out) by extension 'colcon_meta' +[1.212s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4/out) by extensions ['ros'] +[1.212s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4/out) by extension 'ros' +[1.213s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4/out) by extensions ['cmake', 'python'] +[1.213s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4/out) by extension 'cmake' +[1.213s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4/out) by extension 'python' +[1.213s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4/out) by extensions ['python_setup_py'] +[1.214s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-d455fe22d3cee0e4/out) by extension 'python_setup_py' +[1.214s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2) by extensions ['ignore', 'ignore_ament_install'] +[1.215s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2) by extension 'ignore' +[1.215s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2) by extension 'ignore_ament_install' +[1.215s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2) by extensions ['colcon_pkg'] +[1.215s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2) by extension 'colcon_pkg' +[1.216s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2) by extensions ['colcon_meta'] +[1.216s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2) by extension 'colcon_meta' +[1.216s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2) by extensions ['ros'] +[1.216s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2) by extension 'ros' +[1.217s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2) by extensions ['cmake', 'python'] +[1.217s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2) by extension 'cmake' +[1.217s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2) by extension 'python' +[1.217s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2) by extensions ['python_setup_py'] +[1.218s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2) by extension 'python_setup_py' +[1.218s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2/out) by extensions ['ignore', 'ignore_ament_install'] +[1.219s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2/out) by extension 'ignore' +[1.219s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2/out) by extension 'ignore_ament_install' +[1.220s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2/out) by extensions ['colcon_pkg'] +[1.220s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2/out) by extension 'colcon_pkg' +[1.220s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2/out) by extensions ['colcon_meta'] +[1.220s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2/out) by extension 'colcon_meta' +[1.221s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2/out) by extensions ['ros'] +[1.221s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2/out) by extension 'ros' +[1.221s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2/out) by extensions ['cmake', 'python'] +[1.221s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2/out) by extension 'cmake' +[1.222s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2/out) by extension 'python' +[1.222s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2/out) by extensions ['python_setup_py'] +[1.222s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/icu_properties_data-e6459e47edef98b2/out) by extension 'python_setup_py' +[1.223s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25) by extensions ['ignore', 'ignore_ament_install'] +[1.224s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25) by extension 'ignore' +[1.224s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25) by extension 'ignore_ament_install' +[1.225s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25) by extensions ['colcon_pkg'] +[1.225s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25) by extension 'colcon_pkg' +[1.225s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25) by extensions ['colcon_meta'] +[1.225s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25) by extension 'colcon_meta' +[1.226s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25) by extensions ['ros'] +[1.226s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25) by extension 'ros' +[1.227s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25) by extensions ['cmake', 'python'] +[1.227s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25) by extension 'cmake' +[1.227s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25) by extension 'python' +[1.228s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25) by extensions ['python_setup_py'] +[1.228s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25) by extension 'python_setup_py' +[1.229s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25/out) by extensions ['ignore', 'ignore_ament_install'] +[1.229s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25/out) by extension 'ignore' +[1.229s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25/out) by extension 'ignore_ament_install' +[1.230s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25/out) by extensions ['colcon_pkg'] +[1.230s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25/out) by extension 'colcon_pkg' +[1.230s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25/out) by extensions ['colcon_meta'] +[1.230s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25/out) by extension 'colcon_meta' +[1.230s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25/out) by extensions ['ros'] +[1.231s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25/out) by extension 'ros' +[1.231s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25/out) by extensions ['cmake', 'python'] +[1.231s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25/out) by extension 'cmake' +[1.231s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25/out) by extension 'python' +[1.232s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25/out) by extensions ['python_setup_py'] +[1.232s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-3ac3d0df60768c25/out) by extension 'python_setup_py' +[1.232s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e) by extensions ['ignore', 'ignore_ament_install'] +[1.233s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e) by extension 'ignore' +[1.233s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e) by extension 'ignore_ament_install' +[1.234s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e) by extensions ['colcon_pkg'] +[1.234s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e) by extension 'colcon_pkg' +[1.234s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e) by extensions ['colcon_meta'] +[1.234s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e) by extension 'colcon_meta' +[1.234s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e) by extensions ['ros'] +[1.235s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e) by extension 'ros' +[1.235s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e) by extensions ['cmake', 'python'] +[1.235s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e) by extension 'cmake' +[1.235s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e) by extension 'python' +[1.236s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e) by extensions ['python_setup_py'] +[1.236s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e) by extension 'python_setup_py' +[1.237s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e/out) by extensions ['ignore', 'ignore_ament_install'] +[1.237s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e/out) by extension 'ignore' +[1.238s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e/out) by extension 'ignore_ament_install' +[1.238s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e/out) by extensions ['colcon_pkg'] +[1.238s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e/out) by extension 'colcon_pkg' +[1.239s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e/out) by extensions ['colcon_meta'] +[1.239s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e/out) by extension 'colcon_meta' +[1.239s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e/out) by extensions ['ros'] +[1.239s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e/out) by extension 'ros' +[1.240s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e/out) by extensions ['cmake', 'python'] +[1.240s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e/out) by extension 'cmake' +[1.240s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e/out) by extension 'python' +[1.240s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e/out) by extensions ['python_setup_py'] +[1.240s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-941bd027ae1e3c1e/out) by extension 'python_setup_py' +[1.241s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-e5e19ac056fba711) by extensions ['ignore', 'ignore_ament_install'] +[1.242s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-e5e19ac056fba711) by extension 'ignore' +[1.242s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-e5e19ac056fba711) by extension 'ignore_ament_install' +[1.243s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-e5e19ac056fba711) by extensions ['colcon_pkg'] +[1.243s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-e5e19ac056fba711) by extension 'colcon_pkg' +[1.243s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-e5e19ac056fba711) by extensions ['colcon_meta'] +[1.243s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-e5e19ac056fba711) by extension 'colcon_meta' +[1.243s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-e5e19ac056fba711) by extensions ['ros'] +[1.244s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-e5e19ac056fba711) by extension 'ros' +[1.244s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-e5e19ac056fba711) by extensions ['cmake', 'python'] +[1.244s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-e5e19ac056fba711) by extension 'cmake' +[1.245s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-e5e19ac056fba711) by extension 'python' +[1.245s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-e5e19ac056fba711) by extensions ['python_setup_py'] +[1.245s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-e5e19ac056fba711) by extension 'python_setup_py' +[1.246s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-f12d3c7f7c553909) by extensions ['ignore', 'ignore_ament_install'] +[1.246s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-f12d3c7f7c553909) by extension 'ignore' +[1.247s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-f12d3c7f7c553909) by extension 'ignore_ament_install' +[1.247s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-f12d3c7f7c553909) by extensions ['colcon_pkg'] +[1.247s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-f12d3c7f7c553909) by extension 'colcon_pkg' +[1.247s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-f12d3c7f7c553909) by extensions ['colcon_meta'] +[1.247s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-f12d3c7f7c553909) by extension 'colcon_meta' +[1.248s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-f12d3c7f7c553909) by extensions ['ros'] +[1.248s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-f12d3c7f7c553909) by extension 'ros' +[1.248s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-f12d3c7f7c553909) by extensions ['cmake', 'python'] +[1.248s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-f12d3c7f7c553909) by extension 'cmake' +[1.248s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-f12d3c7f7c553909) by extension 'python' +[1.248s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-f12d3c7f7c553909) by extensions ['python_setup_py'] +[1.248s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/libc-f12d3c7f7c553909) by extension 'python_setup_py' +[1.249s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231) by extensions ['ignore', 'ignore_ament_install'] +[1.250s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231) by extension 'ignore' +[1.250s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231) by extension 'ignore_ament_install' +[1.250s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231) by extensions ['colcon_pkg'] +[1.250s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231) by extension 'colcon_pkg' +[1.251s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231) by extensions ['colcon_meta'] +[1.251s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231) by extension 'colcon_meta' +[1.251s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231) by extensions ['ros'] +[1.251s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231) by extension 'ros' +[1.251s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231) by extensions ['cmake', 'python'] +[1.251s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231) by extension 'cmake' +[1.251s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231) by extension 'python' +[1.252s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231) by extensions ['python_setup_py'] +[1.252s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231) by extension 'python_setup_py' +[1.252s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231/out) by extensions ['ignore', 'ignore_ament_install'] +[1.253s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231/out) by extension 'ignore' +[1.253s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231/out) by extension 'ignore_ament_install' +[1.253s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231/out) by extensions ['colcon_pkg'] +[1.253s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231/out) by extension 'colcon_pkg' +[1.253s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231/out) by extensions ['colcon_meta'] +[1.254s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231/out) by extension 'colcon_meta' +[1.254s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231/out) by extensions ['ros'] +[1.254s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231/out) by extension 'ros' +[1.254s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231/out) by extensions ['cmake', 'python'] +[1.254s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231/out) by extension 'cmake' +[1.254s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231/out) by extension 'python' +[1.254s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231/out) by extensions ['python_setup_py'] +[1.254s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-2ff7d6ae4bb18231/out) by extension 'python_setup_py' +[1.255s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-648216b65b5f8725) by extensions ['ignore', 'ignore_ament_install'] +[1.255s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-648216b65b5f8725) by extension 'ignore' +[1.256s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-648216b65b5f8725) by extension 'ignore_ament_install' +[1.256s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-648216b65b5f8725) by extensions ['colcon_pkg'] +[1.256s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-648216b65b5f8725) by extension 'colcon_pkg' +[1.256s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-648216b65b5f8725) by extensions ['colcon_meta'] +[1.256s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-648216b65b5f8725) by extension 'colcon_meta' +[1.256s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-648216b65b5f8725) by extensions ['ros'] +[1.257s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-648216b65b5f8725) by extension 'ros' +[1.257s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-648216b65b5f8725) by extensions ['cmake', 'python'] +[1.257s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-648216b65b5f8725) by extension 'cmake' +[1.257s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-648216b65b5f8725) by extension 'python' +[1.258s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-648216b65b5f8725) by extensions ['python_setup_py'] +[1.258s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-648216b65b5f8725) by extension 'python_setup_py' +[1.258s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-71463008c60fe1b9) by extensions ['ignore', 'ignore_ament_install'] +[1.259s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-71463008c60fe1b9) by extension 'ignore' +[1.259s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-71463008c60fe1b9) by extension 'ignore_ament_install' +[1.259s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-71463008c60fe1b9) by extensions ['colcon_pkg'] +[1.259s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-71463008c60fe1b9) by extension 'colcon_pkg' +[1.260s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-71463008c60fe1b9) by extensions ['colcon_meta'] +[1.260s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-71463008c60fe1b9) by extension 'colcon_meta' +[1.260s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-71463008c60fe1b9) by extensions ['ros'] +[1.260s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-71463008c60fe1b9) by extension 'ros' +[1.260s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-71463008c60fe1b9) by extensions ['cmake', 'python'] +[1.260s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-71463008c60fe1b9) by extension 'cmake' +[1.261s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-71463008c60fe1b9) by extension 'python' +[1.261s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-71463008c60fe1b9) by extensions ['python_setup_py'] +[1.261s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-71463008c60fe1b9) by extension 'python_setup_py' +[1.262s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa) by extensions ['ignore', 'ignore_ament_install'] +[1.262s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa) by extension 'ignore' +[1.262s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa) by extension 'ignore_ament_install' +[1.262s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa) by extensions ['colcon_pkg'] +[1.263s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa) by extension 'colcon_pkg' +[1.263s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa) by extensions ['colcon_meta'] +[1.263s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa) by extension 'colcon_meta' +[1.263s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa) by extensions ['ros'] +[1.263s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa) by extension 'ros' +[1.263s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa) by extensions ['cmake', 'python'] +[1.263s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa) by extension 'cmake' +[1.264s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa) by extension 'python' +[1.264s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa) by extensions ['python_setup_py'] +[1.264s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa) by extension 'python_setup_py' +[1.264s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa/out) by extensions ['ignore', 'ignore_ament_install'] +[1.265s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa/out) by extension 'ignore' +[1.265s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa/out) by extension 'ignore_ament_install' +[1.265s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa/out) by extensions ['colcon_pkg'] +[1.265s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa/out) by extension 'colcon_pkg' +[1.266s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa/out) by extensions ['colcon_meta'] +[1.266s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa/out) by extension 'colcon_meta' +[1.266s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa/out) by extensions ['ros'] +[1.266s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa/out) by extension 'ros' +[1.266s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa/out) by extensions ['cmake', 'python'] +[1.266s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa/out) by extension 'cmake' +[1.266s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa/out) by extension 'python' +[1.267s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa/out) by extensions ['python_setup_py'] +[1.267s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/parking_lot_core-aafd26525caff7fa/out) by extension 'python_setup_py' +[1.268s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058) by extensions ['ignore', 'ignore_ament_install'] +[1.268s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058) by extension 'ignore' +[1.268s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058) by extension 'ignore_ament_install' +[1.269s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058) by extensions ['colcon_pkg'] +[1.269s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058) by extension 'colcon_pkg' +[1.269s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058) by extensions ['colcon_meta'] +[1.269s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058) by extension 'colcon_meta' +[1.269s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058) by extensions ['ros'] +[1.269s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058) by extension 'ros' +[1.269s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058) by extensions ['cmake', 'python'] +[1.270s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058) by extension 'cmake' +[1.270s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058) by extension 'python' +[1.270s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058) by extensions ['python_setup_py'] +[1.270s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058) by extension 'python_setup_py' +[1.271s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058/out) by extensions ['ignore', 'ignore_ament_install'] +[1.271s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058/out) by extension 'ignore' +[1.271s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058/out) by extension 'ignore_ament_install' +[1.272s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058/out) by extensions ['colcon_pkg'] +[1.272s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058/out) by extension 'colcon_pkg' +[1.272s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058/out) by extensions ['colcon_meta'] +[1.272s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058/out) by extension 'colcon_meta' +[1.272s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058/out) by extensions ['ros'] +[1.272s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058/out) by extension 'ros' +[1.273s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058/out) by extensions ['cmake', 'python'] +[1.273s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058/out) by extension 'cmake' +[1.274s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058/out) by extension 'python' +[1.274s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058/out) by extensions ['python_setup_py'] +[1.274s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-4a599ed645bc3058/out) by extension 'python_setup_py' +[1.275s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f) by extensions ['ignore', 'ignore_ament_install'] +[1.276s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f) by extension 'ignore' +[1.276s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f) by extension 'ignore_ament_install' +[1.277s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f) by extensions ['colcon_pkg'] +[1.277s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f) by extension 'colcon_pkg' +[1.277s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f) by extensions ['colcon_meta'] +[1.278s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f) by extension 'colcon_meta' +[1.278s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f) by extensions ['ros'] +[1.278s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f) by extension 'ros' +[1.278s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f) by extensions ['cmake', 'python'] +[1.279s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f) by extension 'cmake' +[1.279s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f) by extension 'python' +[1.279s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f) by extensions ['python_setup_py'] +[1.279s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f) by extension 'python_setup_py' +[1.280s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f/out) by extensions ['ignore', 'ignore_ament_install'] +[1.280s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f/out) by extension 'ignore' +[1.281s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f/out) by extension 'ignore_ament_install' +[1.281s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f/out) by extensions ['colcon_pkg'] +[1.282s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f/out) by extension 'colcon_pkg' +[1.282s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f/out) by extensions ['colcon_meta'] +[1.282s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f/out) by extension 'colcon_meta' +[1.282s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f/out) by extensions ['ros'] +[1.282s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f/out) by extension 'ros' +[1.283s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f/out) by extensions ['cmake', 'python'] +[1.283s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f/out) by extension 'cmake' +[1.283s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f/out) by extension 'python' +[1.284s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f/out) by extensions ['python_setup_py'] +[1.284s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-61c634d37b25cf4f/out) by extension 'python_setup_py' +[1.285s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-86585082b6f41d92) by extensions ['ignore', 'ignore_ament_install'] +[1.285s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-86585082b6f41d92) by extension 'ignore' +[1.286s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-86585082b6f41d92) by extension 'ignore_ament_install' +[1.286s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-86585082b6f41d92) by extensions ['colcon_pkg'] +[1.286s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-86585082b6f41d92) by extension 'colcon_pkg' +[1.286s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-86585082b6f41d92) by extensions ['colcon_meta'] +[1.286s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-86585082b6f41d92) by extension 'colcon_meta' +[1.287s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-86585082b6f41d92) by extensions ['ros'] +[1.287s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-86585082b6f41d92) by extension 'ros' +[1.287s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-86585082b6f41d92) by extensions ['cmake', 'python'] +[1.287s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-86585082b6f41d92) by extension 'cmake' +[1.287s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-86585082b6f41d92) by extension 'python' +[1.288s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-86585082b6f41d92) by extensions ['python_setup_py'] +[1.288s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-86585082b6f41d92) by extension 'python_setup_py' +[1.289s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-f6b188e467ff5883) by extensions ['ignore', 'ignore_ament_install'] +[1.289s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-f6b188e467ff5883) by extension 'ignore' +[1.290s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-f6b188e467ff5883) by extension 'ignore_ament_install' +[1.290s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-f6b188e467ff5883) by extensions ['colcon_pkg'] +[1.290s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-f6b188e467ff5883) by extension 'colcon_pkg' +[1.291s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-f6b188e467ff5883) by extensions ['colcon_meta'] +[1.291s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-f6b188e467ff5883) by extension 'colcon_meta' +[1.291s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-f6b188e467ff5883) by extensions ['ros'] +[1.291s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-f6b188e467ff5883) by extension 'ros' +[1.292s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-f6b188e467ff5883) by extensions ['cmake', 'python'] +[1.292s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-f6b188e467ff5883) by extension 'cmake' +[1.292s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-f6b188e467ff5883) by extension 'python' +[1.292s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-f6b188e467ff5883) by extensions ['python_setup_py'] +[1.292s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/proc-macro2-f6b188e467ff5883) by extension 'python_setup_py' +[1.293s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7) by extensions ['ignore', 'ignore_ament_install'] +[1.294s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7) by extension 'ignore' +[1.294s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7) by extension 'ignore_ament_install' +[1.294s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7) by extensions ['colcon_pkg'] +[1.295s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7) by extension 'colcon_pkg' +[1.295s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7) by extensions ['colcon_meta'] +[1.295s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7) by extension 'colcon_meta' +[1.295s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7) by extensions ['ros'] +[1.295s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7) by extension 'ros' +[1.296s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7) by extensions ['cmake', 'python'] +[1.296s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7) by extension 'cmake' +[1.296s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7) by extension 'python' +[1.297s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7) by extensions ['python_setup_py'] +[1.297s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7) by extension 'python_setup_py' +[1.298s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7/out) by extensions ['ignore', 'ignore_ament_install'] +[1.299s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7/out) by extension 'ignore' +[1.299s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7/out) by extension 'ignore_ament_install' +[1.300s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7/out) by extensions ['colcon_pkg'] +[1.300s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7/out) by extension 'colcon_pkg' +[1.300s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7/out) by extensions ['colcon_meta'] +[1.301s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7/out) by extension 'colcon_meta' +[1.301s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7/out) by extensions ['ros'] +[1.301s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7/out) by extension 'ros' +[1.301s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7/out) by extensions ['cmake', 'python'] +[1.301s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7/out) by extension 'cmake' +[1.301s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7/out) by extension 'python' +[1.301s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7/out) by extensions ['python_setup_py'] +[1.302s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-0570cbb96c29a4e7/out) by extension 'python_setup_py' +[1.302s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-2d6f624269425af0) by extensions ['ignore', 'ignore_ament_install'] +[1.303s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-2d6f624269425af0) by extension 'ignore' +[1.303s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-2d6f624269425af0) by extension 'ignore_ament_install' +[1.304s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-2d6f624269425af0) by extensions ['colcon_pkg'] +[1.304s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-2d6f624269425af0) by extension 'colcon_pkg' +[1.304s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-2d6f624269425af0) by extensions ['colcon_meta'] +[1.304s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-2d6f624269425af0) by extension 'colcon_meta' +[1.304s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-2d6f624269425af0) by extensions ['ros'] +[1.304s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-2d6f624269425af0) by extension 'ros' +[1.304s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-2d6f624269425af0) by extensions ['cmake', 'python'] +[1.304s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-2d6f624269425af0) by extension 'cmake' +[1.305s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-2d6f624269425af0) by extension 'python' +[1.305s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-2d6f624269425af0) by extensions ['python_setup_py'] +[1.305s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-2d6f624269425af0) by extension 'python_setup_py' +[1.306s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc) by extensions ['ignore', 'ignore_ament_install'] +[1.307s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc) by extension 'ignore' +[1.307s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc) by extension 'ignore_ament_install' +[1.308s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc) by extensions ['colcon_pkg'] +[1.308s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc) by extension 'colcon_pkg' +[1.308s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc) by extensions ['colcon_meta'] +[1.308s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc) by extension 'colcon_meta' +[1.309s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc) by extensions ['ros'] +[1.309s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc) by extension 'ros' +[1.309s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc) by extensions ['cmake', 'python'] +[1.309s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc) by extension 'cmake' +[1.310s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc) by extension 'python' +[1.310s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc) by extensions ['python_setup_py'] +[1.310s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc) by extension 'python_setup_py' +[1.311s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc/out) by extensions ['ignore', 'ignore_ament_install'] +[1.312s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc/out) by extension 'ignore' +[1.312s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc/out) by extension 'ignore_ament_install' +[1.312s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc/out) by extensions ['colcon_pkg'] +[1.313s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc/out) by extension 'colcon_pkg' +[1.313s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc/out) by extensions ['colcon_meta'] +[1.313s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc/out) by extension 'colcon_meta' +[1.313s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc/out) by extensions ['ros'] +[1.313s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc/out) by extension 'ros' +[1.314s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc/out) by extensions ['cmake', 'python'] +[1.314s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc/out) by extension 'cmake' +[1.314s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc/out) by extension 'python' +[1.314s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc/out) by extensions ['python_setup_py'] +[1.314s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-c281fce0bf1934bc/out) by extension 'python_setup_py' +[1.315s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-df94c1d0f5801bb9) by extensions ['ignore', 'ignore_ament_install'] +[1.316s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-df94c1d0f5801bb9) by extension 'ignore' +[1.316s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-df94c1d0f5801bb9) by extension 'ignore_ament_install' +[1.317s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-df94c1d0f5801bb9) by extensions ['colcon_pkg'] +[1.317s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-df94c1d0f5801bb9) by extension 'colcon_pkg' +[1.317s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-df94c1d0f5801bb9) by extensions ['colcon_meta'] +[1.317s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-df94c1d0f5801bb9) by extension 'colcon_meta' +[1.317s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-df94c1d0f5801bb9) by extensions ['ros'] +[1.318s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-df94c1d0f5801bb9) by extension 'ros' +[1.318s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-df94c1d0f5801bb9) by extensions ['cmake', 'python'] +[1.318s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-df94c1d0f5801bb9) by extension 'cmake' +[1.319s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-df94c1d0f5801bb9) by extension 'python' +[1.319s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-df94c1d0f5801bb9) by extensions ['python_setup_py'] +[1.319s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/quote-df94c1d0f5801bb9) by extension 'python_setup_py' +[1.320s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-0be1b285607e6bb3) by extensions ['ignore', 'ignore_ament_install'] +[1.321s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-0be1b285607e6bb3) by extension 'ignore' +[1.321s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-0be1b285607e6bb3) by extension 'ignore_ament_install' +[1.321s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-0be1b285607e6bb3) by extensions ['colcon_pkg'] +[1.321s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-0be1b285607e6bb3) by extension 'colcon_pkg' +[1.321s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-0be1b285607e6bb3) by extensions ['colcon_meta'] +[1.321s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-0be1b285607e6bb3) by extension 'colcon_meta' +[1.322s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-0be1b285607e6bb3) by extensions ['ros'] +[1.322s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-0be1b285607e6bb3) by extension 'ros' +[1.322s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-0be1b285607e6bb3) by extensions ['cmake', 'python'] +[1.323s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-0be1b285607e6bb3) by extension 'cmake' +[1.323s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-0be1b285607e6bb3) by extension 'python' +[1.323s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-0be1b285607e6bb3) by extensions ['python_setup_py'] +[1.324s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-0be1b285607e6bb3) by extension 'python_setup_py' +[1.325s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c) by extensions ['ignore', 'ignore_ament_install'] +[1.325s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c) by extension 'ignore' +[1.325s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c) by extension 'ignore_ament_install' +[1.326s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c) by extensions ['colcon_pkg'] +[1.326s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c) by extension 'colcon_pkg' +[1.326s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c) by extensions ['colcon_meta'] +[1.326s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c) by extension 'colcon_meta' +[1.327s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c) by extensions ['ros'] +[1.327s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c) by extension 'ros' +[1.327s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c) by extensions ['cmake', 'python'] +[1.327s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c) by extension 'cmake' +[1.328s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c) by extension 'python' +[1.328s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c) by extensions ['python_setup_py'] +[1.328s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c) by extension 'python_setup_py' +[1.329s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c/out) by extensions ['ignore', 'ignore_ament_install'] +[1.329s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c/out) by extension 'ignore' +[1.330s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c/out) by extension 'ignore_ament_install' +[1.330s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c/out) by extensions ['colcon_pkg'] +[1.330s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c/out) by extension 'colcon_pkg' +[1.330s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c/out) by extensions ['colcon_meta'] +[1.331s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c/out) by extension 'colcon_meta' +[1.331s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c/out) by extensions ['ros'] +[1.331s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c/out) by extension 'ros' +[1.331s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c/out) by extensions ['cmake', 'python'] +[1.332s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c/out) by extension 'cmake' +[1.332s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c/out) by extension 'python' +[1.332s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c/out) by extensions ['python_setup_py'] +[1.332s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-17ef7af06b3ebf7c/out) by extension 'python_setup_py' +[1.333s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4) by extensions ['ignore', 'ignore_ament_install'] +[1.334s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4) by extension 'ignore' +[1.334s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4) by extension 'ignore_ament_install' +[1.334s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4) by extensions ['colcon_pkg'] +[1.334s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4) by extension 'colcon_pkg' +[1.335s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4) by extensions ['colcon_meta'] +[1.335s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4) by extension 'colcon_meta' +[1.335s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4) by extensions ['ros'] +[1.335s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4) by extension 'ros' +[1.335s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4) by extensions ['cmake', 'python'] +[1.336s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4) by extension 'cmake' +[1.336s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4) by extension 'python' +[1.336s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4) by extensions ['python_setup_py'] +[1.336s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4) by extension 'python_setup_py' +[1.338s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4/out) by extensions ['ignore', 'ignore_ament_install'] +[1.338s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4/out) by extension 'ignore' +[1.339s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4/out) by extension 'ignore_ament_install' +[1.339s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4/out) by extensions ['colcon_pkg'] +[1.339s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4/out) by extension 'colcon_pkg' +[1.340s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4/out) by extensions ['colcon_meta'] +[1.340s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4/out) by extension 'colcon_meta' +[1.340s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4/out) by extensions ['ros'] +[1.340s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4/out) by extension 'ros' +[1.341s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4/out) by extensions ['cmake', 'python'] +[1.341s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4/out) by extension 'cmake' +[1.341s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4/out) by extension 'python' +[1.341s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4/out) by extensions ['python_setup_py'] +[1.342s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-be62b92d4562b0f4/out) by extension 'python_setup_py' +[1.343s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-e7f06f5de16a9578) by extensions ['ignore', 'ignore_ament_install'] +[1.343s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-e7f06f5de16a9578) by extension 'ignore' +[1.344s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-e7f06f5de16a9578) by extension 'ignore_ament_install' +[1.345s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-e7f06f5de16a9578) by extensions ['colcon_pkg'] +[1.345s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-e7f06f5de16a9578) by extension 'colcon_pkg' +[1.345s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-e7f06f5de16a9578) by extensions ['colcon_meta'] +[1.345s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-e7f06f5de16a9578) by extension 'colcon_meta' +[1.346s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-e7f06f5de16a9578) by extensions ['ros'] +[1.346s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-e7f06f5de16a9578) by extension 'ros' +[1.346s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-e7f06f5de16a9578) by extensions ['cmake', 'python'] +[1.347s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-e7f06f5de16a9578) by extension 'cmake' +[1.347s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-e7f06f5de16a9578) by extension 'python' +[1.347s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-e7f06f5de16a9578) by extensions ['python_setup_py'] +[1.347s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde-e7f06f5de16a9578) by extension 'python_setup_py' +[1.348s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-5b186a30dda9ef02) by extensions ['ignore', 'ignore_ament_install'] +[1.349s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-5b186a30dda9ef02) by extension 'ignore' +[1.349s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-5b186a30dda9ef02) by extension 'ignore_ament_install' +[1.349s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-5b186a30dda9ef02) by extensions ['colcon_pkg'] +[1.350s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-5b186a30dda9ef02) by extension 'colcon_pkg' +[1.350s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-5b186a30dda9ef02) by extensions ['colcon_meta'] +[1.350s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-5b186a30dda9ef02) by extension 'colcon_meta' +[1.350s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-5b186a30dda9ef02) by extensions ['ros'] +[1.350s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-5b186a30dda9ef02) by extension 'ros' +[1.351s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-5b186a30dda9ef02) by extensions ['cmake', 'python'] +[1.351s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-5b186a30dda9ef02) by extension 'cmake' +[1.351s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-5b186a30dda9ef02) by extension 'python' +[1.352s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-5b186a30dda9ef02) by extensions ['python_setup_py'] +[1.352s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-5b186a30dda9ef02) by extension 'python_setup_py' +[1.353s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca) by extensions ['ignore', 'ignore_ament_install'] +[1.353s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca) by extension 'ignore' +[1.354s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca) by extension 'ignore_ament_install' +[1.354s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca) by extensions ['colcon_pkg'] +[1.354s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca) by extension 'colcon_pkg' +[1.355s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca) by extensions ['colcon_meta'] +[1.355s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca) by extension 'colcon_meta' +[1.355s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca) by extensions ['ros'] +[1.355s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca) by extension 'ros' +[1.356s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca) by extensions ['cmake', 'python'] +[1.356s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca) by extension 'cmake' +[1.357s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca) by extension 'python' +[1.357s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca) by extensions ['python_setup_py'] +[1.357s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca) by extension 'python_setup_py' +[1.358s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca/out) by extensions ['ignore', 'ignore_ament_install'] +[1.358s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca/out) by extension 'ignore' +[1.358s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca/out) by extension 'ignore_ament_install' +[1.358s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca/out) by extensions ['colcon_pkg'] +[1.359s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca/out) by extension 'colcon_pkg' +[1.359s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca/out) by extensions ['colcon_meta'] +[1.359s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca/out) by extension 'colcon_meta' +[1.359s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca/out) by extensions ['ros'] +[1.359s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca/out) by extension 'ros' +[1.359s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca/out) by extensions ['cmake', 'python'] +[1.360s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca/out) by extension 'cmake' +[1.360s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca/out) by extension 'python' +[1.360s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca/out) by extensions ['python_setup_py'] +[1.360s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-67f6dd61bd31c7ca/out) by extension 'python_setup_py' +[1.361s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-d41f4cabe1a0d1c9) by extensions ['ignore', 'ignore_ament_install'] +[1.361s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-d41f4cabe1a0d1c9) by extension 'ignore' +[1.362s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-d41f4cabe1a0d1c9) by extension 'ignore_ament_install' +[1.362s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-d41f4cabe1a0d1c9) by extensions ['colcon_pkg'] +[1.362s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-d41f4cabe1a0d1c9) by extension 'colcon_pkg' +[1.362s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-d41f4cabe1a0d1c9) by extensions ['colcon_meta'] +[1.363s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-d41f4cabe1a0d1c9) by extension 'colcon_meta' +[1.363s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-d41f4cabe1a0d1c9) by extensions ['ros'] +[1.363s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-d41f4cabe1a0d1c9) by extension 'ros' +[1.364s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-d41f4cabe1a0d1c9) by extensions ['cmake', 'python'] +[1.364s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-d41f4cabe1a0d1c9) by extension 'cmake' +[1.364s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-d41f4cabe1a0d1c9) by extension 'python' +[1.364s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-d41f4cabe1a0d1c9) by extensions ['python_setup_py'] +[1.365s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-d41f4cabe1a0d1c9) by extension 'python_setup_py' +[1.365s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06) by extensions ['ignore', 'ignore_ament_install'] +[1.366s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06) by extension 'ignore' +[1.366s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06) by extension 'ignore_ament_install' +[1.366s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06) by extensions ['colcon_pkg'] +[1.367s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06) by extension 'colcon_pkg' +[1.367s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06) by extensions ['colcon_meta'] +[1.367s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06) by extension 'colcon_meta' +[1.367s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06) by extensions ['ros'] +[1.367s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06) by extension 'ros' +[1.368s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06) by extensions ['cmake', 'python'] +[1.368s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06) by extension 'cmake' +[1.368s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06) by extension 'python' +[1.368s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06) by extensions ['python_setup_py'] +[1.368s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06) by extension 'python_setup_py' +[1.369s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06/out) by extensions ['ignore', 'ignore_ament_install'] +[1.369s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06/out) by extension 'ignore' +[1.370s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06/out) by extension 'ignore_ament_install' +[1.370s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06/out) by extensions ['colcon_pkg'] +[1.370s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06/out) by extension 'colcon_pkg' +[1.370s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06/out) by extensions ['colcon_meta'] +[1.371s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06/out) by extension 'colcon_meta' +[1.371s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06/out) by extensions ['ros'] +[1.371s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06/out) by extension 'ros' +[1.372s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06/out) by extensions ['cmake', 'python'] +[1.372s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06/out) by extension 'cmake' +[1.372s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06/out) by extension 'python' +[1.372s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06/out) by extensions ['python_setup_py'] +[1.372s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_core-e9531bdb6193ba06/out) by extension 'python_setup_py' +[1.373s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-05dbb17b43a331ac) by extensions ['ignore', 'ignore_ament_install'] +[1.373s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-05dbb17b43a331ac) by extension 'ignore' +[1.374s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-05dbb17b43a331ac) by extension 'ignore_ament_install' +[1.374s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-05dbb17b43a331ac) by extensions ['colcon_pkg'] +[1.374s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-05dbb17b43a331ac) by extension 'colcon_pkg' +[1.374s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-05dbb17b43a331ac) by extensions ['colcon_meta'] +[1.374s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-05dbb17b43a331ac) by extension 'colcon_meta' +[1.375s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-05dbb17b43a331ac) by extensions ['ros'] +[1.375s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-05dbb17b43a331ac) by extension 'ros' +[1.375s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-05dbb17b43a331ac) by extensions ['cmake', 'python'] +[1.376s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-05dbb17b43a331ac) by extension 'cmake' +[1.376s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-05dbb17b43a331ac) by extension 'python' +[1.376s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-05dbb17b43a331ac) by extensions ['python_setup_py'] +[1.376s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-05dbb17b43a331ac) by extension 'python_setup_py' +[1.377s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897) by extensions ['ignore', 'ignore_ament_install'] +[1.377s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897) by extension 'ignore' +[1.378s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897) by extension 'ignore_ament_install' +[1.378s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897) by extensions ['colcon_pkg'] +[1.378s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897) by extension 'colcon_pkg' +[1.379s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897) by extensions ['colcon_meta'] +[1.379s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897) by extension 'colcon_meta' +[1.379s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897) by extensions ['ros'] +[1.379s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897) by extension 'ros' +[1.380s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897) by extensions ['cmake', 'python'] +[1.380s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897) by extension 'cmake' +[1.380s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897) by extension 'python' +[1.381s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897) by extensions ['python_setup_py'] +[1.381s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897) by extension 'python_setup_py' +[1.382s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897/out) by extensions ['ignore', 'ignore_ament_install'] +[1.382s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897/out) by extension 'ignore' +[1.383s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897/out) by extension 'ignore_ament_install' +[1.383s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897/out) by extensions ['colcon_pkg'] +[1.383s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897/out) by extension 'colcon_pkg' +[1.383s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897/out) by extensions ['colcon_meta'] +[1.384s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897/out) by extension 'colcon_meta' +[1.384s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897/out) by extensions ['ros'] +[1.384s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897/out) by extension 'ros' +[1.384s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897/out) by extensions ['cmake', 'python'] +[1.384s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897/out) by extension 'cmake' +[1.385s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897/out) by extension 'python' +[1.385s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897/out) by extensions ['python_setup_py'] +[1.385s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-1d318e301908b897/out) by extension 'python_setup_py' +[1.385s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042) by extensions ['ignore', 'ignore_ament_install'] +[1.386s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042) by extension 'ignore' +[1.386s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042) by extension 'ignore_ament_install' +[1.387s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042) by extensions ['colcon_pkg'] +[1.387s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042) by extension 'colcon_pkg' +[1.387s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042) by extensions ['colcon_meta'] +[1.387s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042) by extension 'colcon_meta' +[1.388s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042) by extensions ['ros'] +[1.388s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042) by extension 'ros' +[1.388s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042) by extensions ['cmake', 'python'] +[1.389s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042) by extension 'cmake' +[1.389s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042) by extension 'python' +[1.389s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042) by extensions ['python_setup_py'] +[1.389s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042) by extension 'python_setup_py' +[1.390s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042/out) by extensions ['ignore', 'ignore_ament_install'] +[1.391s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042/out) by extension 'ignore' +[1.391s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042/out) by extension 'ignore_ament_install' +[1.392s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042/out) by extensions ['colcon_pkg'] +[1.392s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042/out) by extension 'colcon_pkg' +[1.392s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042/out) by extensions ['colcon_meta'] +[1.392s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042/out) by extension 'colcon_meta' +[1.392s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042/out) by extensions ['ros'] +[1.393s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042/out) by extension 'ros' +[1.393s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042/out) by extensions ['cmake', 'python'] +[1.393s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042/out) by extension 'cmake' +[1.393s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042/out) by extension 'python' +[1.394s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042/out) by extensions ['python_setup_py'] +[1.394s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-556b6cf5c302a042/out) by extension 'python_setup_py' +[1.395s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-5a6c079082828684) by extensions ['ignore', 'ignore_ament_install'] +[1.396s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-5a6c079082828684) by extension 'ignore' +[1.396s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-5a6c079082828684) by extension 'ignore_ament_install' +[1.397s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-5a6c079082828684) by extensions ['colcon_pkg'] +[1.397s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-5a6c079082828684) by extension 'colcon_pkg' +[1.398s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-5a6c079082828684) by extensions ['colcon_meta'] +[1.398s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-5a6c079082828684) by extension 'colcon_meta' +[1.398s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-5a6c079082828684) by extensions ['ros'] +[1.398s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-5a6c079082828684) by extension 'ros' +[1.399s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-5a6c079082828684) by extensions ['cmake', 'python'] +[1.399s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-5a6c079082828684) by extension 'cmake' +[1.399s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-5a6c079082828684) by extension 'python' +[1.399s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-5a6c079082828684) by extensions ['python_setup_py'] +[1.400s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/serde_json-5a6c079082828684) by extension 'python_setup_py' +[1.400s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349) by extensions ['ignore', 'ignore_ament_install'] +[1.401s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349) by extension 'ignore' +[1.402s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349) by extension 'ignore_ament_install' +[1.402s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349) by extensions ['colcon_pkg'] +[1.402s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349) by extension 'colcon_pkg' +[1.403s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349) by extensions ['colcon_meta'] +[1.403s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349) by extension 'colcon_meta' +[1.403s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349) by extensions ['ros'] +[1.403s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349) by extension 'ros' +[1.404s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349) by extensions ['cmake', 'python'] +[1.404s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349) by extension 'cmake' +[1.404s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349) by extension 'python' +[1.404s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349) by extensions ['python_setup_py'] +[1.404s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349) by extension 'python_setup_py' +[1.405s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349/out) by extensions ['ignore', 'ignore_ament_install'] +[1.406s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349/out) by extension 'ignore' +[1.407s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349/out) by extension 'ignore_ament_install' +[1.407s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349/out) by extensions ['colcon_pkg'] +[1.407s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349/out) by extension 'colcon_pkg' +[1.407s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349/out) by extensions ['colcon_meta'] +[1.408s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349/out) by extension 'colcon_meta' +[1.408s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349/out) by extensions ['ros'] +[1.408s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349/out) by extension 'ros' +[1.408s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349/out) by extensions ['cmake', 'python'] +[1.408s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349/out) by extension 'cmake' +[1.408s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349/out) by extension 'python' +[1.409s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349/out) by extensions ['python_setup_py'] +[1.409s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-3e9c54f9d8e35349/out) by extension 'python_setup_py' +[1.409s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-46d53bce916bfdbc) by extensions ['ignore', 'ignore_ament_install'] +[1.410s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-46d53bce916bfdbc) by extension 'ignore' +[1.410s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-46d53bce916bfdbc) by extension 'ignore_ament_install' +[1.410s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-46d53bce916bfdbc) by extensions ['colcon_pkg'] +[1.410s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-46d53bce916bfdbc) by extension 'colcon_pkg' +[1.410s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-46d53bce916bfdbc) by extensions ['colcon_meta'] +[1.410s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-46d53bce916bfdbc) by extension 'colcon_meta' +[1.411s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-46d53bce916bfdbc) by extensions ['ros'] +[1.411s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-46d53bce916bfdbc) by extension 'ros' +[1.411s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-46d53bce916bfdbc) by extensions ['cmake', 'python'] +[1.411s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-46d53bce916bfdbc) by extension 'cmake' +[1.411s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-46d53bce916bfdbc) by extension 'python' +[1.411s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-46d53bce916bfdbc) by extensions ['python_setup_py'] +[1.411s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-46d53bce916bfdbc) by extension 'python_setup_py' +[1.412s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-a392cf5ca611cf30) by extensions ['ignore', 'ignore_ament_install'] +[1.412s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-a392cf5ca611cf30) by extension 'ignore' +[1.412s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-a392cf5ca611cf30) by extension 'ignore_ament_install' +[1.413s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-a392cf5ca611cf30) by extensions ['colcon_pkg'] +[1.413s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-a392cf5ca611cf30) by extension 'colcon_pkg' +[1.413s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-a392cf5ca611cf30) by extensions ['colcon_meta'] +[1.413s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-a392cf5ca611cf30) by extension 'colcon_meta' +[1.413s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-a392cf5ca611cf30) by extensions ['ros'] +[1.413s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-a392cf5ca611cf30) by extension 'ros' +[1.413s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-a392cf5ca611cf30) by extensions ['cmake', 'python'] +[1.414s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-a392cf5ca611cf30) by extension 'cmake' +[1.414s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-a392cf5ca611cf30) by extension 'python' +[1.414s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-a392cf5ca611cf30) by extensions ['python_setup_py'] +[1.414s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-a392cf5ca611cf30) by extension 'python_setup_py' +[1.415s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0) by extensions ['ignore', 'ignore_ament_install'] +[1.415s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0) by extension 'ignore' +[1.415s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0) by extension 'ignore_ament_install' +[1.416s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0) by extensions ['colcon_pkg'] +[1.416s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0) by extension 'colcon_pkg' +[1.416s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0) by extensions ['colcon_meta'] +[1.416s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0) by extension 'colcon_meta' +[1.416s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0) by extensions ['ros'] +[1.416s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0) by extension 'ros' +[1.416s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0) by extensions ['cmake', 'python'] +[1.417s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0) by extension 'cmake' +[1.417s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0) by extension 'python' +[1.417s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0) by extensions ['python_setup_py'] +[1.417s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0) by extension 'python_setup_py' +[1.418s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0/out) by extensions ['ignore', 'ignore_ament_install'] +[1.418s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0/out) by extension 'ignore' +[1.419s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0/out) by extension 'ignore_ament_install' +[1.419s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0/out) by extensions ['colcon_pkg'] +[1.419s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0/out) by extension 'colcon_pkg' +[1.419s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0/out) by extensions ['colcon_meta'] +[1.419s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0/out) by extension 'colcon_meta' +[1.420s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0/out) by extensions ['ros'] +[1.420s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0/out) by extension 'ros' +[1.420s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0/out) by extensions ['cmake', 'python'] +[1.420s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0/out) by extension 'cmake' +[1.420s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0/out) by extension 'python' +[1.421s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0/out) by extensions ['python_setup_py'] +[1.421s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/build/zmij-e7063428c5e956e0/out) by extension 'python_setup_py' +[1.428s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/deps) by extensions ['ignore', 'ignore_ament_install'] +[1.429s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/deps) by extension 'ignore' +[1.429s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/deps) by extension 'ignore_ament_install' +[1.430s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/deps) by extensions ['colcon_pkg'] +[1.430s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/deps) by extension 'colcon_pkg' +[1.430s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/deps) by extensions ['colcon_meta'] +[1.431s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/deps) by extension 'colcon_meta' +[1.431s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/deps) by extensions ['ros'] +[1.431s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/deps) by extension 'ros' +[1.431s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/deps) by extensions ['cmake', 'python'] +[1.431s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/deps) by extension 'cmake' +[1.431s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/deps) by extension 'python' +[1.432s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/deps) by extensions ['python_setup_py'] +[1.432s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/deps) by extension 'python_setup_py' +[1.432s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/examples) by extensions ['ignore', 'ignore_ament_install'] +[1.433s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/examples) by extension 'ignore' +[1.433s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/examples) by extension 'ignore_ament_install' +[1.433s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/examples) by extensions ['colcon_pkg'] +[1.433s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/examples) by extension 'colcon_pkg' +[1.433s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/examples) by extensions ['colcon_meta'] +[1.433s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/examples) by extension 'colcon_meta' +[1.433s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/examples) by extensions ['ros'] +[1.434s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/examples) by extension 'ros' +[1.434s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/examples) by extensions ['cmake', 'python'] +[1.434s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/examples) by extension 'cmake' +[1.434s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/examples) by extension 'python' +[1.434s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/examples) by extensions ['python_setup_py'] +[1.434s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/examples) by extension 'python_setup_py' +[1.435s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental) by extensions ['ignore', 'ignore_ament_install'] +[1.435s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental) by extension 'ignore' +[1.435s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental) by extension 'ignore_ament_install' +[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental) by extensions ['colcon_pkg'] +[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental) by extension 'colcon_pkg' +[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental) by extensions ['colcon_meta'] +[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental) by extension 'colcon_meta' +[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental) by extensions ['ros'] +[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental) by extension 'ros' +[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental) by extensions ['cmake', 'python'] +[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental) by extension 'cmake' +[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental) by extension 'python' +[1.437s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental) by extensions ['python_setup_py'] +[1.437s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental) by extension 'python_setup_py' +[1.437s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm) by extensions ['ignore', 'ignore_ament_install'] +[1.437s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm) by extension 'ignore' +[1.438s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm) by extension 'ignore_ament_install' +[1.438s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm) by extensions ['colcon_pkg'] +[1.438s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm) by extension 'colcon_pkg' +[1.438s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm) by extensions ['colcon_meta'] +[1.438s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm) by extension 'colcon_meta' +[1.438s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm) by extensions ['ros'] +[1.438s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm) by extension 'ros' +[1.439s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm) by extensions ['cmake', 'python'] +[1.439s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm) by extension 'cmake' +[1.439s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm) by extension 'python' +[1.439s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm) by extensions ['python_setup_py'] +[1.439s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm) by extension 'python_setup_py' +[1.440s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirhbjtsim-17r4aqk-3gwthebg5mj6btpi5njgtout3) by extensions ['ignore', 'ignore_ament_install'] +[1.440s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirhbjtsim-17r4aqk-3gwthebg5mj6btpi5njgtout3) by extension 'ignore' +[1.441s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirhbjtsim-17r4aqk-3gwthebg5mj6btpi5njgtout3) by extension 'ignore_ament_install' +[1.441s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirhbjtsim-17r4aqk-3gwthebg5mj6btpi5njgtout3) by extensions ['colcon_pkg'] +[1.441s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirhbjtsim-17r4aqk-3gwthebg5mj6btpi5njgtout3) by extension 'colcon_pkg' +[1.441s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirhbjtsim-17r4aqk-3gwthebg5mj6btpi5njgtout3) by extensions ['colcon_meta'] +[1.441s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirhbjtsim-17r4aqk-3gwthebg5mj6btpi5njgtout3) by extension 'colcon_meta' +[1.442s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirhbjtsim-17r4aqk-3gwthebg5mj6btpi5njgtout3) by extensions ['ros'] +[1.442s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirhbjtsim-17r4aqk-3gwthebg5mj6btpi5njgtout3) by extension 'ros' +[1.442s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirhbjtsim-17r4aqk-3gwthebg5mj6btpi5njgtout3) by extensions ['cmake', 'python'] +[1.442s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirhbjtsim-17r4aqk-3gwthebg5mj6btpi5njgtout3) by extension 'cmake' +[1.442s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirhbjtsim-17r4aqk-3gwthebg5mj6btpi5njgtout3) by extension 'python' +[1.442s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirhbjtsim-17r4aqk-3gwthebg5mj6btpi5njgtout3) by extensions ['python_setup_py'] +[1.442s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirhbjtsim-17r4aqk-3gwthebg5mj6btpi5njgtout3) by extension 'python_setup_py' +[1.443s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirih890zt-1epd0et-7s2bi86lhsa377zqbpyf0zhn1) by extensions ['ignore', 'ignore_ament_install'] +[1.444s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirih890zt-1epd0et-7s2bi86lhsa377zqbpyf0zhn1) by extension 'ignore' +[1.444s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirih890zt-1epd0et-7s2bi86lhsa377zqbpyf0zhn1) by extension 'ignore_ament_install' +[1.444s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirih890zt-1epd0et-7s2bi86lhsa377zqbpyf0zhn1) by extensions ['colcon_pkg'] +[1.444s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirih890zt-1epd0et-7s2bi86lhsa377zqbpyf0zhn1) by extension 'colcon_pkg' +[1.444s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirih890zt-1epd0et-7s2bi86lhsa377zqbpyf0zhn1) by extensions ['colcon_meta'] +[1.444s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirih890zt-1epd0et-7s2bi86lhsa377zqbpyf0zhn1) by extension 'colcon_meta' +[1.445s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirih890zt-1epd0et-7s2bi86lhsa377zqbpyf0zhn1) by extensions ['ros'] +[1.445s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirih890zt-1epd0et-7s2bi86lhsa377zqbpyf0zhn1) by extension 'ros' +[1.445s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirih890zt-1epd0et-7s2bi86lhsa377zqbpyf0zhn1) by extensions ['cmake', 'python'] +[1.445s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirih890zt-1epd0et-7s2bi86lhsa377zqbpyf0zhn1) by extension 'cmake' +[1.446s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirih890zt-1epd0et-7s2bi86lhsa377zqbpyf0zhn1) by extension 'python' +[1.446s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirih890zt-1epd0et-7s2bi86lhsa377zqbpyf0zhn1) by extensions ['python_setup_py'] +[1.446s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-01yzg4m06l9xm/s-hirih890zt-1epd0et-7s2bi86lhsa377zqbpyf0zhn1) by extension 'python_setup_py' +[1.447s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71) by extensions ['ignore', 'ignore_ament_install'] +[1.447s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71) by extension 'ignore' +[1.448s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71) by extension 'ignore_ament_install' +[1.448s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71) by extensions ['colcon_pkg'] +[1.448s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71) by extension 'colcon_pkg' +[1.448s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71) by extensions ['colcon_meta'] +[1.448s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71) by extension 'colcon_meta' +[1.448s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71) by extensions ['ros'] +[1.448s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71) by extension 'ros' +[1.449s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71) by extensions ['cmake', 'python'] +[1.449s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71) by extension 'cmake' +[1.449s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71) by extension 'python' +[1.449s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71) by extensions ['python_setup_py'] +[1.449s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71) by extension 'python_setup_py' +[1.450s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirhbjtrhv-0fp87gj-4b0qd9h3dq7a8b4og9nsui4ea) by extensions ['ignore', 'ignore_ament_install'] +[1.450s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirhbjtrhv-0fp87gj-4b0qd9h3dq7a8b4og9nsui4ea) by extension 'ignore' +[1.451s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirhbjtrhv-0fp87gj-4b0qd9h3dq7a8b4og9nsui4ea) by extension 'ignore_ament_install' +[1.451s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirhbjtrhv-0fp87gj-4b0qd9h3dq7a8b4og9nsui4ea) by extensions ['colcon_pkg'] +[1.451s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirhbjtrhv-0fp87gj-4b0qd9h3dq7a8b4og9nsui4ea) by extension 'colcon_pkg' +[1.451s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirhbjtrhv-0fp87gj-4b0qd9h3dq7a8b4og9nsui4ea) by extensions ['colcon_meta'] +[1.451s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirhbjtrhv-0fp87gj-4b0qd9h3dq7a8b4og9nsui4ea) by extension 'colcon_meta' +[1.452s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirhbjtrhv-0fp87gj-4b0qd9h3dq7a8b4og9nsui4ea) by extensions ['ros'] +[1.452s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirhbjtrhv-0fp87gj-4b0qd9h3dq7a8b4og9nsui4ea) by extension 'ros' +[1.452s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirhbjtrhv-0fp87gj-4b0qd9h3dq7a8b4og9nsui4ea) by extensions ['cmake', 'python'] +[1.452s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirhbjtrhv-0fp87gj-4b0qd9h3dq7a8b4og9nsui4ea) by extension 'cmake' +[1.452s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirhbjtrhv-0fp87gj-4b0qd9h3dq7a8b4og9nsui4ea) by extension 'python' +[1.452s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirhbjtrhv-0fp87gj-4b0qd9h3dq7a8b4og9nsui4ea) by extensions ['python_setup_py'] +[1.452s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirhbjtrhv-0fp87gj-4b0qd9h3dq7a8b4og9nsui4ea) by extension 'python_setup_py' +[1.453s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirih890hp-1im7gay-c9usxeyrpa9sostkhp039tx2i) by extensions ['ignore', 'ignore_ament_install'] +[1.454s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirih890hp-1im7gay-c9usxeyrpa9sostkhp039tx2i) by extension 'ignore' +[1.454s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirih890hp-1im7gay-c9usxeyrpa9sostkhp039tx2i) by extension 'ignore_ament_install' +[1.454s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirih890hp-1im7gay-c9usxeyrpa9sostkhp039tx2i) by extensions ['colcon_pkg'] +[1.455s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirih890hp-1im7gay-c9usxeyrpa9sostkhp039tx2i) by extension 'colcon_pkg' +[1.455s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirih890hp-1im7gay-c9usxeyrpa9sostkhp039tx2i) by extensions ['colcon_meta'] +[1.455s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirih890hp-1im7gay-c9usxeyrpa9sostkhp039tx2i) by extension 'colcon_meta' +[1.455s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirih890hp-1im7gay-c9usxeyrpa9sostkhp039tx2i) by extensions ['ros'] +[1.455s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirih890hp-1im7gay-c9usxeyrpa9sostkhp039tx2i) by extension 'ros' +[1.455s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirih890hp-1im7gay-c9usxeyrpa9sostkhp039tx2i) by extensions ['cmake', 'python'] +[1.455s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirih890hp-1im7gay-c9usxeyrpa9sostkhp039tx2i) by extension 'cmake' +[1.456s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirih890hp-1im7gay-c9usxeyrpa9sostkhp039tx2i) by extension 'python' +[1.456s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirih890hp-1im7gay-c9usxeyrpa9sostkhp039tx2i) by extensions ['python_setup_py'] +[1.456s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-0m2x2y3r1cb71/s-hirih890hp-1im7gay-c9usxeyrpa9sostkhp039tx2i) by extension 'python_setup_py' +[1.457s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn) by extensions ['ignore', 'ignore_ament_install'] +[1.457s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn) by extension 'ignore' +[1.458s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn) by extension 'ignore_ament_install' +[1.458s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn) by extensions ['colcon_pkg'] +[1.458s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn) by extension 'colcon_pkg' +[1.458s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn) by extensions ['colcon_meta'] +[1.458s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn) by extension 'colcon_meta' +[1.458s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn) by extensions ['ros'] +[1.458s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn) by extension 'ros' +[1.459s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn) by extensions ['cmake', 'python'] +[1.459s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn) by extension 'cmake' +[1.459s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn) by extension 'python' +[1.459s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn) by extensions ['python_setup_py'] +[1.459s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn) by extension 'python_setup_py' +[1.461s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn/s-hiq3qorsom-0xssag8-7bpeanfwg54cw9x41udd6ejjn) by extensions ['ignore', 'ignore_ament_install'] +[1.462s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn/s-hiq3qorsom-0xssag8-7bpeanfwg54cw9x41udd6ejjn) by extension 'ignore' +[1.462s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn/s-hiq3qorsom-0xssag8-7bpeanfwg54cw9x41udd6ejjn) by extension 'ignore_ament_install' +[1.463s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn/s-hiq3qorsom-0xssag8-7bpeanfwg54cw9x41udd6ejjn) by extensions ['colcon_pkg'] +[1.463s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn/s-hiq3qorsom-0xssag8-7bpeanfwg54cw9x41udd6ejjn) by extension 'colcon_pkg' +[1.463s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn/s-hiq3qorsom-0xssag8-7bpeanfwg54cw9x41udd6ejjn) by extensions ['colcon_meta'] +[1.463s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn/s-hiq3qorsom-0xssag8-7bpeanfwg54cw9x41udd6ejjn) by extension 'colcon_meta' +[1.463s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn/s-hiq3qorsom-0xssag8-7bpeanfwg54cw9x41udd6ejjn) by extensions ['ros'] +[1.464s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn/s-hiq3qorsom-0xssag8-7bpeanfwg54cw9x41udd6ejjn) by extension 'ros' +[1.464s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn/s-hiq3qorsom-0xssag8-7bpeanfwg54cw9x41udd6ejjn) by extensions ['cmake', 'python'] +[1.464s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn/s-hiq3qorsom-0xssag8-7bpeanfwg54cw9x41udd6ejjn) by extension 'cmake' +[1.464s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn/s-hiq3qorsom-0xssag8-7bpeanfwg54cw9x41udd6ejjn) by extension 'python' +[1.465s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn/s-hiq3qorsom-0xssag8-7bpeanfwg54cw9x41udd6ejjn) by extensions ['python_setup_py'] +[1.465s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1df0wv8yli3fn/s-hiq3qorsom-0xssag8-7bpeanfwg54cw9x41udd6ejjn) by extension 'python_setup_py' +[1.466s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds) by extensions ['ignore', 'ignore_ament_install'] +[1.466s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds) by extension 'ignore' +[1.466s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds) by extension 'ignore_ament_install' +[1.467s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds) by extensions ['colcon_pkg'] +[1.467s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds) by extension 'colcon_pkg' +[1.467s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds) by extensions ['colcon_meta'] +[1.467s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds) by extension 'colcon_meta' +[1.467s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds) by extensions ['ros'] +[1.468s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds) by extension 'ros' +[1.468s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds) by extensions ['cmake', 'python'] +[1.468s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds) by extension 'cmake' +[1.469s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds) by extension 'python' +[1.469s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds) by extensions ['python_setup_py'] +[1.469s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds) by extension 'python_setup_py' +[1.470s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds/s-hirrbm4xem-16ggc5z-4eui8ltr2bygi70beip59kg0s) by extensions ['ignore', 'ignore_ament_install'] +[1.470s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds/s-hirrbm4xem-16ggc5z-4eui8ltr2bygi70beip59kg0s) by extension 'ignore' +[1.470s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds/s-hirrbm4xem-16ggc5z-4eui8ltr2bygi70beip59kg0s) by extension 'ignore_ament_install' +[1.471s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds/s-hirrbm4xem-16ggc5z-4eui8ltr2bygi70beip59kg0s) by extensions ['colcon_pkg'] +[1.471s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds/s-hirrbm4xem-16ggc5z-4eui8ltr2bygi70beip59kg0s) by extension 'colcon_pkg' +[1.471s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds/s-hirrbm4xem-16ggc5z-4eui8ltr2bygi70beip59kg0s) by extensions ['colcon_meta'] +[1.471s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds/s-hirrbm4xem-16ggc5z-4eui8ltr2bygi70beip59kg0s) by extension 'colcon_meta' +[1.471s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds/s-hirrbm4xem-16ggc5z-4eui8ltr2bygi70beip59kg0s) by extensions ['ros'] +[1.472s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds/s-hirrbm4xem-16ggc5z-4eui8ltr2bygi70beip59kg0s) by extension 'ros' +[1.472s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds/s-hirrbm4xem-16ggc5z-4eui8ltr2bygi70beip59kg0s) by extensions ['cmake', 'python'] +[1.472s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds/s-hirrbm4xem-16ggc5z-4eui8ltr2bygi70beip59kg0s) by extension 'cmake' +[1.472s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds/s-hirrbm4xem-16ggc5z-4eui8ltr2bygi70beip59kg0s) by extension 'python' +[1.473s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds/s-hirrbm4xem-16ggc5z-4eui8ltr2bygi70beip59kg0s) by extensions ['python_setup_py'] +[1.473s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1z452dh0qzgds/s-hirrbm4xem-16ggc5z-4eui8ltr2bygi70beip59kg0s) by extension 'python_setup_py' +[1.474s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm) by extensions ['ignore', 'ignore_ament_install'] +[1.474s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm) by extension 'ignore' +[1.475s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm) by extension 'ignore_ament_install' +[1.475s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm) by extensions ['colcon_pkg'] +[1.475s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm) by extension 'colcon_pkg' +[1.476s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm) by extensions ['colcon_meta'] +[1.476s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm) by extension 'colcon_meta' +[1.476s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm) by extensions ['ros'] +[1.476s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm) by extension 'ros' +[1.477s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm) by extensions ['cmake', 'python'] +[1.477s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm) by extension 'cmake' +[1.477s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm) by extension 'python' +[1.477s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm) by extensions ['python_setup_py'] +[1.477s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm) by extension 'python_setup_py' +[1.479s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy2yrqrf-1hl9031-4akkiy8qahbh6qcul91m9ngej) by extensions ['ignore', 'ignore_ament_install'] +[1.479s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy2yrqrf-1hl9031-4akkiy8qahbh6qcul91m9ngej) by extension 'ignore' +[1.480s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy2yrqrf-1hl9031-4akkiy8qahbh6qcul91m9ngej) by extension 'ignore_ament_install' +[1.480s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy2yrqrf-1hl9031-4akkiy8qahbh6qcul91m9ngej) by extensions ['colcon_pkg'] +[1.480s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy2yrqrf-1hl9031-4akkiy8qahbh6qcul91m9ngej) by extension 'colcon_pkg' +[1.480s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy2yrqrf-1hl9031-4akkiy8qahbh6qcul91m9ngej) by extensions ['colcon_meta'] +[1.480s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy2yrqrf-1hl9031-4akkiy8qahbh6qcul91m9ngej) by extension 'colcon_meta' +[1.480s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy2yrqrf-1hl9031-4akkiy8qahbh6qcul91m9ngej) by extensions ['ros'] +[1.481s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy2yrqrf-1hl9031-4akkiy8qahbh6qcul91m9ngej) by extension 'ros' +[1.481s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy2yrqrf-1hl9031-4akkiy8qahbh6qcul91m9ngej) by extensions ['cmake', 'python'] +[1.481s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy2yrqrf-1hl9031-4akkiy8qahbh6qcul91m9ngej) by extension 'cmake' +[1.481s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy2yrqrf-1hl9031-4akkiy8qahbh6qcul91m9ngej) by extension 'python' +[1.481s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy2yrqrf-1hl9031-4akkiy8qahbh6qcul91m9ngej) by extensions ['python_setup_py'] +[1.481s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy2yrqrf-1hl9031-4akkiy8qahbh6qcul91m9ngej) by extension 'python_setup_py' +[1.483s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy5txrem-0nkgf94-1km22npp64ildnb1xal5pn59r) by extensions ['ignore', 'ignore_ament_install'] +[1.483s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy5txrem-0nkgf94-1km22npp64ildnb1xal5pn59r) by extension 'ignore' +[1.484s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy5txrem-0nkgf94-1km22npp64ildnb1xal5pn59r) by extension 'ignore_ament_install' +[1.484s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy5txrem-0nkgf94-1km22npp64ildnb1xal5pn59r) by extensions ['colcon_pkg'] +[1.485s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy5txrem-0nkgf94-1km22npp64ildnb1xal5pn59r) by extension 'colcon_pkg' +[1.485s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy5txrem-0nkgf94-1km22npp64ildnb1xal5pn59r) by extensions ['colcon_meta'] +[1.485s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy5txrem-0nkgf94-1km22npp64ildnb1xal5pn59r) by extension 'colcon_meta' +[1.485s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy5txrem-0nkgf94-1km22npp64ildnb1xal5pn59r) by extensions ['ros'] +[1.486s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy5txrem-0nkgf94-1km22npp64ildnb1xal5pn59r) by extension 'ros' +[1.486s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy5txrem-0nkgf94-1km22npp64ildnb1xal5pn59r) by extensions ['cmake', 'python'] +[1.487s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy5txrem-0nkgf94-1km22npp64ildnb1xal5pn59r) by extension 'cmake' +[1.487s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy5txrem-0nkgf94-1km22npp64ildnb1xal5pn59r) by extension 'python' +[1.487s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy5txrem-0nkgf94-1km22npp64ildnb1xal5pn59r) by extensions ['python_setup_py'] +[1.487s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-1zth4v5emexqm/s-hisy5txrem-0nkgf94-1km22npp64ildnb1xal5pn59r) by extension 'python_setup_py' +[1.488s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp) by extensions ['ignore', 'ignore_ament_install'] +[1.489s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp) by extension 'ignore' +[1.489s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp) by extension 'ignore_ament_install' +[1.489s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp) by extensions ['colcon_pkg'] +[1.489s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp) by extension 'colcon_pkg' +[1.490s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp) by extensions ['colcon_meta'] +[1.490s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp) by extension 'colcon_meta' +[1.490s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp) by extensions ['ros'] +[1.490s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp) by extension 'ros' +[1.491s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp) by extensions ['cmake', 'python'] +[1.491s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp) by extension 'cmake' +[1.491s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp) by extension 'python' +[1.491s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp) by extensions ['python_setup_py'] +[1.491s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp) by extension 'python_setup_py' +[1.493s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hisu4zzwok-1yg9e7m-0yjjt0j37yxs5z17m9zr6n0c2) by extensions ['ignore', 'ignore_ament_install'] +[1.494s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hisu4zzwok-1yg9e7m-0yjjt0j37yxs5z17m9zr6n0c2) by extension 'ignore' +[1.494s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hisu4zzwok-1yg9e7m-0yjjt0j37yxs5z17m9zr6n0c2) by extension 'ignore_ament_install' +[1.495s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hisu4zzwok-1yg9e7m-0yjjt0j37yxs5z17m9zr6n0c2) by extensions ['colcon_pkg'] +[1.495s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hisu4zzwok-1yg9e7m-0yjjt0j37yxs5z17m9zr6n0c2) by extension 'colcon_pkg' +[1.495s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hisu4zzwok-1yg9e7m-0yjjt0j37yxs5z17m9zr6n0c2) by extensions ['colcon_meta'] +[1.495s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hisu4zzwok-1yg9e7m-0yjjt0j37yxs5z17m9zr6n0c2) by extension 'colcon_meta' +[1.495s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hisu4zzwok-1yg9e7m-0yjjt0j37yxs5z17m9zr6n0c2) by extensions ['ros'] +[1.495s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hisu4zzwok-1yg9e7m-0yjjt0j37yxs5z17m9zr6n0c2) by extension 'ros' +[1.496s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hisu4zzwok-1yg9e7m-0yjjt0j37yxs5z17m9zr6n0c2) by extensions ['cmake', 'python'] +[1.496s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hisu4zzwok-1yg9e7m-0yjjt0j37yxs5z17m9zr6n0c2) by extension 'cmake' +[1.497s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hisu4zzwok-1yg9e7m-0yjjt0j37yxs5z17m9zr6n0c2) by extension 'python' +[1.497s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hisu4zzwok-1yg9e7m-0yjjt0j37yxs5z17m9zr6n0c2) by extensions ['python_setup_py'] +[1.497s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hisu4zzwok-1yg9e7m-0yjjt0j37yxs5z17m9zr6n0c2) by extension 'python_setup_py' +[1.499s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hiswufl1od-078phwi-67d93jzwz402imuj16wrdmuim) by extensions ['ignore', 'ignore_ament_install'] +[1.500s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hiswufl1od-078phwi-67d93jzwz402imuj16wrdmuim) by extension 'ignore' +[1.500s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hiswufl1od-078phwi-67d93jzwz402imuj16wrdmuim) by extension 'ignore_ament_install' +[1.501s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hiswufl1od-078phwi-67d93jzwz402imuj16wrdmuim) by extensions ['colcon_pkg'] +[1.501s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hiswufl1od-078phwi-67d93jzwz402imuj16wrdmuim) by extension 'colcon_pkg' +[1.501s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hiswufl1od-078phwi-67d93jzwz402imuj16wrdmuim) by extensions ['colcon_meta'] +[1.502s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hiswufl1od-078phwi-67d93jzwz402imuj16wrdmuim) by extension 'colcon_meta' +[1.502s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hiswufl1od-078phwi-67d93jzwz402imuj16wrdmuim) by extensions ['ros'] +[1.502s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hiswufl1od-078phwi-67d93jzwz402imuj16wrdmuim) by extension 'ros' +[1.503s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hiswufl1od-078phwi-67d93jzwz402imuj16wrdmuim) by extensions ['cmake', 'python'] +[1.503s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hiswufl1od-078phwi-67d93jzwz402imuj16wrdmuim) by extension 'cmake' +[1.503s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hiswufl1od-078phwi-67d93jzwz402imuj16wrdmuim) by extension 'python' +[1.503s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hiswufl1od-078phwi-67d93jzwz402imuj16wrdmuim) by extensions ['python_setup_py'] +[1.503s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38h5p9xrm68wp/s-hiswufl1od-078phwi-67d93jzwz402imuj16wrdmuim) by extension 'python_setup_py' +[1.504s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct) by extensions ['ignore', 'ignore_ament_install'] +[1.505s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct) by extension 'ignore' +[1.505s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct) by extension 'ignore_ament_install' +[1.505s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct) by extensions ['colcon_pkg'] +[1.506s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct) by extension 'colcon_pkg' +[1.506s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct) by extensions ['colcon_meta'] +[1.506s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct) by extension 'colcon_meta' +[1.506s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct) by extensions ['ros'] +[1.506s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct) by extension 'ros' +[1.507s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct) by extensions ['cmake', 'python'] +[1.507s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct) by extension 'cmake' +[1.507s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct) by extension 'python' +[1.508s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct) by extensions ['python_setup_py'] +[1.508s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct) by extension 'python_setup_py' +[1.509s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hiqlannoly-0v975mo-dgkekrmze6kd9tb38e6dsvyy4) by extensions ['ignore', 'ignore_ament_install'] +[1.509s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hiqlannoly-0v975mo-dgkekrmze6kd9tb38e6dsvyy4) by extension 'ignore' +[1.509s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hiqlannoly-0v975mo-dgkekrmze6kd9tb38e6dsvyy4) by extension 'ignore_ament_install' +[1.510s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hiqlannoly-0v975mo-dgkekrmze6kd9tb38e6dsvyy4) by extensions ['colcon_pkg'] +[1.510s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hiqlannoly-0v975mo-dgkekrmze6kd9tb38e6dsvyy4) by extension 'colcon_pkg' +[1.510s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hiqlannoly-0v975mo-dgkekrmze6kd9tb38e6dsvyy4) by extensions ['colcon_meta'] +[1.510s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hiqlannoly-0v975mo-dgkekrmze6kd9tb38e6dsvyy4) by extension 'colcon_meta' +[1.511s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hiqlannoly-0v975mo-dgkekrmze6kd9tb38e6dsvyy4) by extensions ['ros'] +[1.511s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hiqlannoly-0v975mo-dgkekrmze6kd9tb38e6dsvyy4) by extension 'ros' +[1.511s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hiqlannoly-0v975mo-dgkekrmze6kd9tb38e6dsvyy4) by extensions ['cmake', 'python'] +[1.511s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hiqlannoly-0v975mo-dgkekrmze6kd9tb38e6dsvyy4) by extension 'cmake' +[1.511s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hiqlannoly-0v975mo-dgkekrmze6kd9tb38e6dsvyy4) by extension 'python' +[1.512s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hiqlannoly-0v975mo-dgkekrmze6kd9tb38e6dsvyy4) by extensions ['python_setup_py'] +[1.512s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hiqlannoly-0v975mo-dgkekrmze6kd9tb38e6dsvyy4) by extension 'python_setup_py' +[1.513s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hirrbm4xen-1ytk2ef-7bevncjs287377ildyh0ob7ze) by extensions ['ignore', 'ignore_ament_install'] +[1.513s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hirrbm4xen-1ytk2ef-7bevncjs287377ildyh0ob7ze) by extension 'ignore' +[1.514s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hirrbm4xen-1ytk2ef-7bevncjs287377ildyh0ob7ze) by extension 'ignore_ament_install' +[1.514s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hirrbm4xen-1ytk2ef-7bevncjs287377ildyh0ob7ze) by extensions ['colcon_pkg'] +[1.514s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hirrbm4xen-1ytk2ef-7bevncjs287377ildyh0ob7ze) by extension 'colcon_pkg' +[1.515s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hirrbm4xen-1ytk2ef-7bevncjs287377ildyh0ob7ze) by extensions ['colcon_meta'] +[1.515s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hirrbm4xen-1ytk2ef-7bevncjs287377ildyh0ob7ze) by extension 'colcon_meta' +[1.515s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hirrbm4xen-1ytk2ef-7bevncjs287377ildyh0ob7ze) by extensions ['ros'] +[1.515s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hirrbm4xen-1ytk2ef-7bevncjs287377ildyh0ob7ze) by extension 'ros' +[1.516s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hirrbm4xen-1ytk2ef-7bevncjs287377ildyh0ob7ze) by extensions ['cmake', 'python'] +[1.516s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hirrbm4xen-1ytk2ef-7bevncjs287377ildyh0ob7ze) by extension 'cmake' +[1.516s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hirrbm4xen-1ytk2ef-7bevncjs287377ildyh0ob7ze) by extension 'python' +[1.516s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hirrbm4xen-1ytk2ef-7bevncjs287377ildyh0ob7ze) by extensions ['python_setup_py'] +[1.516s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/debug/incremental/urdf_lsp-38nhdzexd55ct/s-hirrbm4xen-1ytk2ef-7bevncjs287377ildyh0ob7ze) by extension 'python_setup_py' +[1.517s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/flycheck0) by extensions ['ignore', 'ignore_ament_install'] +[1.517s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/flycheck0) by extension 'ignore' +[1.517s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/flycheck0) by extension 'ignore_ament_install' +[1.518s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/flycheck0) by extensions ['colcon_pkg'] +[1.518s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/flycheck0) by extension 'colcon_pkg' +[1.518s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/flycheck0) by extensions ['colcon_meta'] +[1.518s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/flycheck0) by extension 'colcon_meta' +[1.518s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/flycheck0) by extensions ['ros'] +[1.518s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/flycheck0) by extension 'ros' +[1.519s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/flycheck0) by extensions ['cmake', 'python'] +[1.519s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/flycheck0) by extension 'cmake' +[1.519s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/flycheck0) by extension 'python' +[1.519s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/flycheck0) by extensions ['python_setup_py'] +[1.519s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/flycheck0) by extension 'python_setup_py' +[1.520s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release) by extensions ['ignore', 'ignore_ament_install'] +[1.520s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release) by extension 'ignore' +[1.520s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release) by extension 'ignore_ament_install' +[1.521s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release) by extensions ['colcon_pkg'] +[1.521s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release) by extension 'colcon_pkg' +[1.521s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release) by extensions ['colcon_meta'] +[1.521s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release) by extension 'colcon_meta' +[1.521s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release) by extensions ['ros'] +[1.521s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release) by extension 'ros' +[1.521s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release) by extensions ['cmake', 'python'] +[1.521s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release) by extension 'cmake' +[1.521s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release) by extension 'python' +[1.522s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release) by extensions ['python_setup_py'] +[1.522s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release) by extension 'python_setup_py' +[1.522s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build) by extensions ['ignore', 'ignore_ament_install'] +[1.523s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build) by extension 'ignore' +[1.523s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build) by extension 'ignore_ament_install' +[1.523s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build) by extensions ['colcon_pkg'] +[1.524s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build) by extension 'colcon_pkg' +[1.524s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build) by extensions ['colcon_meta'] +[1.524s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build) by extension 'colcon_meta' +[1.524s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build) by extensions ['ros'] +[1.525s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build) by extension 'ros' +[1.525s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build) by extensions ['cmake', 'python'] +[1.525s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build) by extension 'cmake' +[1.525s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build) by extension 'python' +[1.525s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build) by extensions ['python_setup_py'] +[1.525s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build) by extension 'python_setup_py' +[1.527s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87) by extensions ['ignore', 'ignore_ament_install'] +[1.527s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87) by extension 'ignore' +[1.527s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87) by extension 'ignore_ament_install' +[1.528s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87) by extensions ['colcon_pkg'] +[1.528s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87) by extension 'colcon_pkg' +[1.528s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87) by extensions ['colcon_meta'] +[1.528s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87) by extension 'colcon_meta' +[1.528s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87) by extensions ['ros'] +[1.528s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87) by extension 'ros' +[1.528s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87) by extensions ['cmake', 'python'] +[1.528s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87) by extension 'cmake' +[1.529s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87) by extension 'python' +[1.529s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87) by extensions ['python_setup_py'] +[1.529s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87) by extension 'python_setup_py' +[1.530s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87/out) by extensions ['ignore', 'ignore_ament_install'] +[1.531s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87/out) by extension 'ignore' +[1.531s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87/out) by extension 'ignore_ament_install' +[1.531s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87/out) by extensions ['colcon_pkg'] +[1.532s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87/out) by extension 'colcon_pkg' +[1.532s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87/out) by extensions ['colcon_meta'] +[1.532s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87/out) by extension 'colcon_meta' +[1.532s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87/out) by extensions ['ros'] +[1.532s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87/out) by extension 'ros' +[1.533s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87/out) by extensions ['cmake', 'python'] +[1.533s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87/out) by extension 'cmake' +[1.533s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87/out) by extension 'python' +[1.534s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87/out) by extensions ['python_setup_py'] +[1.534s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-056d60ef2929ae87/out) by extension 'python_setup_py' +[1.535s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-189838f5591fef47) by extensions ['ignore', 'ignore_ament_install'] +[1.536s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-189838f5591fef47) by extension 'ignore' +[1.536s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-189838f5591fef47) by extension 'ignore_ament_install' +[1.537s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-189838f5591fef47) by extensions ['colcon_pkg'] +[1.537s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-189838f5591fef47) by extension 'colcon_pkg' +[1.537s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-189838f5591fef47) by extensions ['colcon_meta'] +[1.537s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-189838f5591fef47) by extension 'colcon_meta' +[1.537s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-189838f5591fef47) by extensions ['ros'] +[1.537s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-189838f5591fef47) by extension 'ros' +[1.538s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-189838f5591fef47) by extensions ['cmake', 'python'] +[1.538s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-189838f5591fef47) by extension 'cmake' +[1.538s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-189838f5591fef47) by extension 'python' +[1.538s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-189838f5591fef47) by extensions ['python_setup_py'] +[1.538s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/httparse-189838f5591fef47) by extension 'python_setup_py' +[1.539s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7) by extensions ['ignore', 'ignore_ament_install'] +[1.540s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7) by extension 'ignore' +[1.541s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7) by extension 'ignore_ament_install' +[1.541s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7) by extensions ['colcon_pkg'] +[1.541s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7) by extension 'colcon_pkg' +[1.542s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7) by extensions ['colcon_meta'] +[1.542s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7) by extension 'colcon_meta' +[1.542s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7) by extensions ['ros'] +[1.542s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7) by extension 'ros' +[1.543s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7) by extensions ['cmake', 'python'] +[1.543s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7) by extension 'cmake' +[1.543s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7) by extension 'python' +[1.544s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7) by extensions ['python_setup_py'] +[1.544s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7) by extension 'python_setup_py' +[1.545s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7/out) by extensions ['ignore', 'ignore_ament_install'] +[1.545s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7/out) by extension 'ignore' +[1.546s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7/out) by extension 'ignore_ament_install' +[1.546s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7/out) by extensions ['colcon_pkg'] +[1.546s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7/out) by extension 'colcon_pkg' +[1.546s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7/out) by extensions ['colcon_meta'] +[1.547s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7/out) by extension 'colcon_meta' +[1.547s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7/out) by extensions ['ros'] +[1.547s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7/out) by extension 'ros' +[1.547s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7/out) by extensions ['cmake', 'python'] +[1.547s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7/out) by extension 'cmake' +[1.548s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7/out) by extension 'python' +[1.548s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7/out) by extensions ['python_setup_py'] +[1.548s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-21efcc0968830ad7/out) by extension 'python_setup_py' +[1.549s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-4f7dacf737616712) by extensions ['ignore', 'ignore_ament_install'] +[1.549s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-4f7dacf737616712) by extension 'ignore' +[1.550s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-4f7dacf737616712) by extension 'ignore_ament_install' +[1.550s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-4f7dacf737616712) by extensions ['colcon_pkg'] +[1.550s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-4f7dacf737616712) by extension 'colcon_pkg' +[1.550s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-4f7dacf737616712) by extensions ['colcon_meta'] +[1.550s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-4f7dacf737616712) by extension 'colcon_meta' +[1.551s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-4f7dacf737616712) by extensions ['ros'] +[1.551s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-4f7dacf737616712) by extension 'ros' +[1.551s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-4f7dacf737616712) by extensions ['cmake', 'python'] +[1.552s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-4f7dacf737616712) by extension 'cmake' +[1.552s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-4f7dacf737616712) by extension 'python' +[1.552s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-4f7dacf737616712) by extensions ['python_setup_py'] +[1.552s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_normalizer_data-4f7dacf737616712) by extension 'python_setup_py' +[1.553s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd) by extensions ['ignore', 'ignore_ament_install'] +[1.553s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd) by extension 'ignore' +[1.554s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd) by extension 'ignore_ament_install' +[1.554s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd) by extensions ['colcon_pkg'] +[1.554s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd) by extension 'colcon_pkg' +[1.554s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd) by extensions ['colcon_meta'] +[1.554s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd) by extension 'colcon_meta' +[1.554s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd) by extensions ['ros'] +[1.554s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd) by extension 'ros' +[1.555s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd) by extensions ['cmake', 'python'] +[1.555s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd) by extension 'cmake' +[1.555s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd) by extension 'python' +[1.555s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd) by extensions ['python_setup_py'] +[1.555s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd) by extension 'python_setup_py' +[1.556s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd/out) by extensions ['ignore', 'ignore_ament_install'] +[1.557s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd/out) by extension 'ignore' +[1.557s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd/out) by extension 'ignore_ament_install' +[1.558s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd/out) by extensions ['colcon_pkg'] +[1.558s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd/out) by extension 'colcon_pkg' +[1.558s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd/out) by extensions ['colcon_meta'] +[1.559s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd/out) by extension 'colcon_meta' +[1.559s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd/out) by extensions ['ros'] +[1.559s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd/out) by extension 'ros' +[1.560s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd/out) by extensions ['cmake', 'python'] +[1.560s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd/out) by extension 'cmake' +[1.560s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd/out) by extension 'python' +[1.560s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd/out) by extensions ['python_setup_py'] +[1.560s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-4763a8036baa46bd/out) by extension 'python_setup_py' +[1.561s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-733b93fa720806db) by extensions ['ignore', 'ignore_ament_install'] +[1.561s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-733b93fa720806db) by extension 'ignore' +[1.561s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-733b93fa720806db) by extension 'ignore_ament_install' +[1.562s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-733b93fa720806db) by extensions ['colcon_pkg'] +[1.562s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-733b93fa720806db) by extension 'colcon_pkg' +[1.562s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-733b93fa720806db) by extensions ['colcon_meta'] +[1.562s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-733b93fa720806db) by extension 'colcon_meta' +[1.562s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-733b93fa720806db) by extensions ['ros'] +[1.562s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-733b93fa720806db) by extension 'ros' +[1.562s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-733b93fa720806db) by extensions ['cmake', 'python'] +[1.562s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-733b93fa720806db) by extension 'cmake' +[1.563s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-733b93fa720806db) by extension 'python' +[1.563s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-733b93fa720806db) by extensions ['python_setup_py'] +[1.563s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/icu_properties_data-733b93fa720806db) by extension 'python_setup_py' +[1.563s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93) by extensions ['ignore', 'ignore_ament_install'] +[1.564s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93) by extension 'ignore' +[1.564s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93) by extension 'ignore_ament_install' +[1.565s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93) by extensions ['colcon_pkg'] +[1.565s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93) by extension 'colcon_pkg' +[1.565s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93) by extensions ['colcon_meta'] +[1.565s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93) by extension 'colcon_meta' +[1.566s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93) by extensions ['ros'] +[1.566s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93) by extension 'ros' +[1.566s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93) by extensions ['cmake', 'python'] +[1.566s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93) by extension 'cmake' +[1.566s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93) by extension 'python' +[1.567s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93) by extensions ['python_setup_py'] +[1.567s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93) by extension 'python_setup_py' +[1.568s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93/out) by extensions ['ignore', 'ignore_ament_install'] +[1.568s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93/out) by extension 'ignore' +[1.569s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93/out) by extension 'ignore_ament_install' +[1.569s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93/out) by extensions ['colcon_pkg'] +[1.569s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93/out) by extension 'colcon_pkg' +[1.570s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93/out) by extensions ['colcon_meta'] +[1.570s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93/out) by extension 'colcon_meta' +[1.570s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93/out) by extensions ['ros'] +[1.570s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93/out) by extension 'ros' +[1.571s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93/out) by extensions ['cmake', 'python'] +[1.571s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93/out) by extension 'cmake' +[1.571s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93/out) by extension 'python' +[1.571s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93/out) by extensions ['python_setup_py'] +[1.571s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-5273b540dd1edd93/out) by extension 'python_setup_py' +[1.572s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-c106f46a493c89c7) by extensions ['ignore', 'ignore_ament_install'] +[1.573s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-c106f46a493c89c7) by extension 'ignore' +[1.573s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-c106f46a493c89c7) by extension 'ignore_ament_install' +[1.573s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-c106f46a493c89c7) by extensions ['colcon_pkg'] +[1.574s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-c106f46a493c89c7) by extension 'colcon_pkg' +[1.574s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-c106f46a493c89c7) by extensions ['colcon_meta'] +[1.574s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-c106f46a493c89c7) by extension 'colcon_meta' +[1.574s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-c106f46a493c89c7) by extensions ['ros'] +[1.574s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-c106f46a493c89c7) by extension 'ros' +[1.574s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-c106f46a493c89c7) by extensions ['cmake', 'python'] +[1.574s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-c106f46a493c89c7) by extension 'cmake' +[1.575s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-c106f46a493c89c7) by extension 'python' +[1.575s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-c106f46a493c89c7) by extensions ['python_setup_py'] +[1.575s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/libc-c106f46a493c89c7) by extension 'python_setup_py' +[1.576s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-68c40be6a5361841) by extensions ['ignore', 'ignore_ament_install'] +[1.576s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-68c40be6a5361841) by extension 'ignore' +[1.577s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-68c40be6a5361841) by extension 'ignore_ament_install' +[1.577s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-68c40be6a5361841) by extensions ['colcon_pkg'] +[1.577s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-68c40be6a5361841) by extension 'colcon_pkg' +[1.577s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-68c40be6a5361841) by extensions ['colcon_meta'] +[1.577s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-68c40be6a5361841) by extension 'colcon_meta' +[1.577s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-68c40be6a5361841) by extensions ['ros'] +[1.577s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-68c40be6a5361841) by extension 'ros' +[1.578s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-68c40be6a5361841) by extensions ['cmake', 'python'] +[1.578s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-68c40be6a5361841) by extension 'cmake' +[1.578s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-68c40be6a5361841) by extension 'python' +[1.578s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-68c40be6a5361841) by extensions ['python_setup_py'] +[1.578s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-68c40be6a5361841) by extension 'python_setup_py' +[1.579s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082) by extensions ['ignore', 'ignore_ament_install'] +[1.580s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082) by extension 'ignore' +[1.580s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082) by extension 'ignore_ament_install' +[1.580s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082) by extensions ['colcon_pkg'] +[1.580s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082) by extension 'colcon_pkg' +[1.580s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082) by extensions ['colcon_meta'] +[1.580s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082) by extension 'colcon_meta' +[1.581s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082) by extensions ['ros'] +[1.581s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082) by extension 'ros' +[1.581s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082) by extensions ['cmake', 'python'] +[1.581s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082) by extension 'cmake' +[1.581s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082) by extension 'python' +[1.582s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082) by extensions ['python_setup_py'] +[1.582s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082) by extension 'python_setup_py' +[1.582s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082/out) by extensions ['ignore', 'ignore_ament_install'] +[1.583s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082/out) by extension 'ignore' +[1.583s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082/out) by extension 'ignore_ament_install' +[1.583s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082/out) by extensions ['colcon_pkg'] +[1.583s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082/out) by extension 'colcon_pkg' +[1.584s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082/out) by extensions ['colcon_meta'] +[1.584s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082/out) by extension 'colcon_meta' +[1.584s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082/out) by extensions ['ros'] +[1.584s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082/out) by extension 'ros' +[1.585s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082/out) by extensions ['cmake', 'python'] +[1.585s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082/out) by extension 'cmake' +[1.585s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082/out) by extension 'python' +[1.585s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082/out) by extensions ['python_setup_py'] +[1.585s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/parking_lot_core-7fc5b017139bb082/out) by extension 'python_setup_py' +[1.586s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329) by extensions ['ignore', 'ignore_ament_install'] +[1.587s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329) by extension 'ignore' +[1.587s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329) by extension 'ignore_ament_install' +[1.587s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329) by extensions ['colcon_pkg'] +[1.587s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329) by extension 'colcon_pkg' +[1.587s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329) by extensions ['colcon_meta'] +[1.587s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329) by extension 'colcon_meta' +[1.588s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329) by extensions ['ros'] +[1.588s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329) by extension 'ros' +[1.588s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329) by extensions ['cmake', 'python'] +[1.588s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329) by extension 'cmake' +[1.588s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329) by extension 'python' +[1.588s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329) by extensions ['python_setup_py'] +[1.588s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329) by extension 'python_setup_py' +[1.589s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329/out) by extensions ['ignore', 'ignore_ament_install'] +[1.589s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329/out) by extension 'ignore' +[1.590s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329/out) by extension 'ignore_ament_install' +[1.590s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329/out) by extensions ['colcon_pkg'] +[1.590s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329/out) by extension 'colcon_pkg' +[1.590s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329/out) by extensions ['colcon_meta'] +[1.590s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329/out) by extension 'colcon_meta' +[1.590s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329/out) by extensions ['ros'] +[1.591s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329/out) by extension 'ros' +[1.591s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329/out) by extensions ['cmake', 'python'] +[1.591s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329/out) by extension 'cmake' +[1.591s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329/out) by extension 'python' +[1.591s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329/out) by extensions ['python_setup_py'] +[1.591s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-34a421676b58a329/out) by extension 'python_setup_py' +[1.592s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-40f7c5a480ac49f8) by extensions ['ignore', 'ignore_ament_install'] +[1.593s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-40f7c5a480ac49f8) by extension 'ignore' +[1.593s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-40f7c5a480ac49f8) by extension 'ignore_ament_install' +[1.593s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-40f7c5a480ac49f8) by extensions ['colcon_pkg'] +[1.594s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-40f7c5a480ac49f8) by extension 'colcon_pkg' +[1.594s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-40f7c5a480ac49f8) by extensions ['colcon_meta'] +[1.594s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-40f7c5a480ac49f8) by extension 'colcon_meta' +[1.594s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-40f7c5a480ac49f8) by extensions ['ros'] +[1.594s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-40f7c5a480ac49f8) by extension 'ros' +[1.595s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-40f7c5a480ac49f8) by extensions ['cmake', 'python'] +[1.595s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-40f7c5a480ac49f8) by extension 'cmake' +[1.595s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-40f7c5a480ac49f8) by extension 'python' +[1.595s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-40f7c5a480ac49f8) by extensions ['python_setup_py'] +[1.595s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/proc-macro2-40f7c5a480ac49f8) by extension 'python_setup_py' +[1.596s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58) by extensions ['ignore', 'ignore_ament_install'] +[1.596s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58) by extension 'ignore' +[1.597s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58) by extension 'ignore_ament_install' +[1.597s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58) by extensions ['colcon_pkg'] +[1.597s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58) by extension 'colcon_pkg' +[1.597s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58) by extensions ['colcon_meta'] +[1.597s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58) by extension 'colcon_meta' +[1.597s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58) by extensions ['ros'] +[1.597s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58) by extension 'ros' +[1.598s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58) by extensions ['cmake', 'python'] +[1.598s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58) by extension 'cmake' +[1.598s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58) by extension 'python' +[1.598s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58) by extensions ['python_setup_py'] +[1.598s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58) by extension 'python_setup_py' +[1.599s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58/out) by extensions ['ignore', 'ignore_ament_install'] +[1.599s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58/out) by extension 'ignore' +[1.599s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58/out) by extension 'ignore_ament_install' +[1.600s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58/out) by extensions ['colcon_pkg'] +[1.600s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58/out) by extension 'colcon_pkg' +[1.600s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58/out) by extensions ['colcon_meta'] +[1.600s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58/out) by extension 'colcon_meta' +[1.600s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58/out) by extensions ['ros'] +[1.600s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58/out) by extension 'ros' +[1.601s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58/out) by extensions ['cmake', 'python'] +[1.601s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58/out) by extension 'cmake' +[1.601s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58/out) by extension 'python' +[1.601s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58/out) by extensions ['python_setup_py'] +[1.601s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-58a1ec1550f97c58/out) by extension 'python_setup_py' +[1.601s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-d72c366486d246d1) by extensions ['ignore', 'ignore_ament_install'] +[1.602s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-d72c366486d246d1) by extension 'ignore' +[1.602s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-d72c366486d246d1) by extension 'ignore_ament_install' +[1.602s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-d72c366486d246d1) by extensions ['colcon_pkg'] +[1.602s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-d72c366486d246d1) by extension 'colcon_pkg' +[1.602s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-d72c366486d246d1) by extensions ['colcon_meta'] +[1.602s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-d72c366486d246d1) by extension 'colcon_meta' +[1.603s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-d72c366486d246d1) by extensions ['ros'] +[1.603s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-d72c366486d246d1) by extension 'ros' +[1.603s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-d72c366486d246d1) by extensions ['cmake', 'python'] +[1.603s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-d72c366486d246d1) by extension 'cmake' +[1.603s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-d72c366486d246d1) by extension 'python' +[1.603s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-d72c366486d246d1) by extensions ['python_setup_py'] +[1.603s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/quote-d72c366486d246d1) by extension 'python_setup_py' +[1.604s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e) by extensions ['ignore', 'ignore_ament_install'] +[1.605s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e) by extension 'ignore' +[1.605s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e) by extension 'ignore_ament_install' +[1.605s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e) by extensions ['colcon_pkg'] +[1.605s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e) by extension 'colcon_pkg' +[1.605s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e) by extensions ['colcon_meta'] +[1.605s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e) by extension 'colcon_meta' +[1.605s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e) by extensions ['ros'] +[1.605s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e) by extension 'ros' +[1.606s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e) by extensions ['cmake', 'python'] +[1.606s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e) by extension 'cmake' +[1.606s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e) by extension 'python' +[1.606s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e) by extensions ['python_setup_py'] +[1.606s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e) by extension 'python_setup_py' +[1.607s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e/out) by extensions ['ignore', 'ignore_ament_install'] +[1.607s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e/out) by extension 'ignore' +[1.607s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e/out) by extension 'ignore_ament_install' +[1.608s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e/out) by extensions ['colcon_pkg'] +[1.608s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e/out) by extension 'colcon_pkg' +[1.608s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e/out) by extensions ['colcon_meta'] +[1.608s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e/out) by extension 'colcon_meta' +[1.608s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e/out) by extensions ['ros'] +[1.608s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e/out) by extension 'ros' +[1.609s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e/out) by extensions ['cmake', 'python'] +[1.609s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e/out) by extension 'cmake' +[1.609s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e/out) by extension 'python' +[1.609s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e/out) by extensions ['python_setup_py'] +[1.609s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-33546f5d2e26b06e/out) by extension 'python_setup_py' +[1.610s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-451eec3fd4108fe5) by extensions ['ignore', 'ignore_ament_install'] +[1.610s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-451eec3fd4108fe5) by extension 'ignore' +[1.611s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-451eec3fd4108fe5) by extension 'ignore_ament_install' +[1.611s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-451eec3fd4108fe5) by extensions ['colcon_pkg'] +[1.612s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-451eec3fd4108fe5) by extension 'colcon_pkg' +[1.612s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-451eec3fd4108fe5) by extensions ['colcon_meta'] +[1.613s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-451eec3fd4108fe5) by extension 'colcon_meta' +[1.613s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-451eec3fd4108fe5) by extensions ['ros'] +[1.613s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-451eec3fd4108fe5) by extension 'ros' +[1.614s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-451eec3fd4108fe5) by extensions ['cmake', 'python'] +[1.614s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-451eec3fd4108fe5) by extension 'cmake' +[1.614s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-451eec3fd4108fe5) by extension 'python' +[1.614s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-451eec3fd4108fe5) by extensions ['python_setup_py'] +[1.614s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde-451eec3fd4108fe5) by extension 'python_setup_py' +[1.615s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-71e913f3aa993cdb) by extensions ['ignore', 'ignore_ament_install'] +[1.616s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-71e913f3aa993cdb) by extension 'ignore' +[1.616s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-71e913f3aa993cdb) by extension 'ignore_ament_install' +[1.617s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-71e913f3aa993cdb) by extensions ['colcon_pkg'] +[1.617s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-71e913f3aa993cdb) by extension 'colcon_pkg' +[1.617s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-71e913f3aa993cdb) by extensions ['colcon_meta'] +[1.617s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-71e913f3aa993cdb) by extension 'colcon_meta' +[1.617s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-71e913f3aa993cdb) by extensions ['ros'] +[1.617s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-71e913f3aa993cdb) by extension 'ros' +[1.618s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-71e913f3aa993cdb) by extensions ['cmake', 'python'] +[1.618s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-71e913f3aa993cdb) by extension 'cmake' +[1.618s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-71e913f3aa993cdb) by extension 'python' +[1.618s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-71e913f3aa993cdb) by extensions ['python_setup_py'] +[1.618s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-71e913f3aa993cdb) by extension 'python_setup_py' +[1.619s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3) by extensions ['ignore', 'ignore_ament_install'] +[1.620s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3) by extension 'ignore' +[1.620s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3) by extension 'ignore_ament_install' +[1.621s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3) by extensions ['colcon_pkg'] +[1.621s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3) by extension 'colcon_pkg' +[1.621s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3) by extensions ['colcon_meta'] +[1.621s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3) by extension 'colcon_meta' +[1.622s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3) by extensions ['ros'] +[1.622s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3) by extension 'ros' +[1.622s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3) by extensions ['cmake', 'python'] +[1.623s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3) by extension 'cmake' +[1.623s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3) by extension 'python' +[1.623s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3) by extensions ['python_setup_py'] +[1.623s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3) by extension 'python_setup_py' +[1.624s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3/out) by extensions ['ignore', 'ignore_ament_install'] +[1.625s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3/out) by extension 'ignore' +[1.625s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3/out) by extension 'ignore_ament_install' +[1.626s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3/out) by extensions ['colcon_pkg'] +[1.626s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3/out) by extension 'colcon_pkg' +[1.626s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3/out) by extensions ['colcon_meta'] +[1.626s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3/out) by extension 'colcon_meta' +[1.626s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3/out) by extensions ['ros'] +[1.626s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3/out) by extension 'ros' +[1.627s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3/out) by extensions ['cmake', 'python'] +[1.627s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3/out) by extension 'cmake' +[1.627s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3/out) by extension 'python' +[1.627s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3/out) by extensions ['python_setup_py'] +[1.627s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_core-95e2955270d56ec3/out) by extension 'python_setup_py' +[1.628s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-080cc00a6c3c6c40) by extensions ['ignore', 'ignore_ament_install'] +[1.629s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-080cc00a6c3c6c40) by extension 'ignore' +[1.629s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-080cc00a6c3c6c40) by extension 'ignore_ament_install' +[1.630s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-080cc00a6c3c6c40) by extensions ['colcon_pkg'] +[1.630s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-080cc00a6c3c6c40) by extension 'colcon_pkg' +[1.630s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-080cc00a6c3c6c40) by extensions ['colcon_meta'] +[1.630s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-080cc00a6c3c6c40) by extension 'colcon_meta' +[1.630s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-080cc00a6c3c6c40) by extensions ['ros'] +[1.631s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-080cc00a6c3c6c40) by extension 'ros' +[1.631s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-080cc00a6c3c6c40) by extensions ['cmake', 'python'] +[1.632s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-080cc00a6c3c6c40) by extension 'cmake' +[1.632s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-080cc00a6c3c6c40) by extension 'python' +[1.632s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-080cc00a6c3c6c40) by extensions ['python_setup_py'] +[1.633s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-080cc00a6c3c6c40) by extension 'python_setup_py' +[1.634s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1) by extensions ['ignore', 'ignore_ament_install'] +[1.634s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1) by extension 'ignore' +[1.635s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1) by extension 'ignore_ament_install' +[1.635s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1) by extensions ['colcon_pkg'] +[1.635s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1) by extension 'colcon_pkg' +[1.636s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1) by extensions ['colcon_meta'] +[1.636s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1) by extension 'colcon_meta' +[1.636s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1) by extensions ['ros'] +[1.636s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1) by extension 'ros' +[1.637s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1) by extensions ['cmake', 'python'] +[1.637s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1) by extension 'cmake' +[1.637s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1) by extension 'python' +[1.637s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1) by extensions ['python_setup_py'] +[1.638s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1) by extension 'python_setup_py' +[1.638s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1/out) by extensions ['ignore', 'ignore_ament_install'] +[1.639s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1/out) by extension 'ignore' +[1.639s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1/out) by extension 'ignore_ament_install' +[1.640s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1/out) by extensions ['colcon_pkg'] +[1.640s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1/out) by extension 'colcon_pkg' +[1.640s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1/out) by extensions ['colcon_meta'] +[1.640s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1/out) by extension 'colcon_meta' +[1.640s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1/out) by extensions ['ros'] +[1.641s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1/out) by extension 'ros' +[1.641s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1/out) by extensions ['cmake', 'python'] +[1.641s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1/out) by extension 'cmake' +[1.642s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1/out) by extension 'python' +[1.642s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1/out) by extensions ['python_setup_py'] +[1.642s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/serde_json-aad158ecddf0acc1/out) by extension 'python_setup_py' +[1.643s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3) by extensions ['ignore', 'ignore_ament_install'] +[1.643s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3) by extension 'ignore' +[1.644s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3) by extension 'ignore_ament_install' +[1.644s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3) by extensions ['colcon_pkg'] +[1.644s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3) by extension 'colcon_pkg' +[1.644s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3) by extensions ['colcon_meta'] +[1.645s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3) by extension 'colcon_meta' +[1.645s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3) by extensions ['ros'] +[1.645s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3) by extension 'ros' +[1.645s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3) by extensions ['cmake', 'python'] +[1.645s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3) by extension 'cmake' +[1.645s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3) by extension 'python' +[1.645s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3) by extensions ['python_setup_py'] +[1.646s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3) by extension 'python_setup_py' +[1.646s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3/out) by extensions ['ignore', 'ignore_ament_install'] +[1.646s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3/out) by extension 'ignore' +[1.647s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3/out) by extension 'ignore_ament_install' +[1.647s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3/out) by extensions ['colcon_pkg'] +[1.647s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3/out) by extension 'colcon_pkg' +[1.647s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3/out) by extensions ['colcon_meta'] +[1.647s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3/out) by extension 'colcon_meta' +[1.647s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3/out) by extensions ['ros'] +[1.647s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3/out) by extension 'ros' +[1.648s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3/out) by extensions ['cmake', 'python'] +[1.648s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3/out) by extension 'cmake' +[1.648s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3/out) by extension 'python' +[1.648s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3/out) by extensions ['python_setup_py'] +[1.648s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-5aa18d8cb0c69ad3/out) by extension 'python_setup_py' +[1.648s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-a48ae93233cfb46d) by extensions ['ignore', 'ignore_ament_install'] +[1.649s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-a48ae93233cfb46d) by extension 'ignore' +[1.649s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-a48ae93233cfb46d) by extension 'ignore_ament_install' +[1.649s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-a48ae93233cfb46d) by extensions ['colcon_pkg'] +[1.649s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-a48ae93233cfb46d) by extension 'colcon_pkg' +[1.649s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-a48ae93233cfb46d) by extensions ['colcon_meta'] +[1.649s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-a48ae93233cfb46d) by extension 'colcon_meta' +[1.650s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-a48ae93233cfb46d) by extensions ['ros'] +[1.650s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-a48ae93233cfb46d) by extension 'ros' +[1.650s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-a48ae93233cfb46d) by extensions ['cmake', 'python'] +[1.650s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-a48ae93233cfb46d) by extension 'cmake' +[1.650s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-a48ae93233cfb46d) by extension 'python' +[1.650s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-a48ae93233cfb46d) by extensions ['python_setup_py'] +[1.650s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/build/zmij-a48ae93233cfb46d) by extension 'python_setup_py' +[1.651s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/deps) by extensions ['ignore', 'ignore_ament_install'] +[1.651s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/deps) by extension 'ignore' +[1.651s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/deps) by extension 'ignore_ament_install' +[1.652s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/deps) by extensions ['colcon_pkg'] +[1.652s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/deps) by extension 'colcon_pkg' +[1.652s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/deps) by extensions ['colcon_meta'] +[1.652s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/deps) by extension 'colcon_meta' +[1.652s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/deps) by extensions ['ros'] +[1.652s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/deps) by extension 'ros' +[1.652s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/deps) by extensions ['cmake', 'python'] +[1.652s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/deps) by extension 'cmake' +[1.652s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/deps) by extension 'python' +[1.652s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/deps) by extensions ['python_setup_py'] +[1.652s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/deps) by extension 'python_setup_py' +[1.653s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/examples) by extensions ['ignore', 'ignore_ament_install'] +[1.653s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/examples) by extension 'ignore' +[1.653s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/examples) by extension 'ignore_ament_install' +[1.653s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/examples) by extensions ['colcon_pkg'] +[1.654s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/examples) by extension 'colcon_pkg' +[1.654s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/examples) by extensions ['colcon_meta'] +[1.654s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/examples) by extension 'colcon_meta' +[1.654s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/examples) by extensions ['ros'] +[1.654s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/examples) by extension 'ros' +[1.654s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/examples) by extensions ['cmake', 'python'] +[1.654s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/examples) by extension 'cmake' +[1.654s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/examples) by extension 'python' +[1.654s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/examples) by extensions ['python_setup_py'] +[1.655s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/examples) by extension 'python_setup_py' +[1.655s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/incremental) by extensions ['ignore', 'ignore_ament_install'] +[1.656s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/incremental) by extension 'ignore' +[1.656s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/incremental) by extension 'ignore_ament_install' +[1.657s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/incremental) by extensions ['colcon_pkg'] +[1.657s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/incremental) by extension 'colcon_pkg' +[1.657s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/incremental) by extensions ['colcon_meta'] +[1.657s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/incremental) by extension 'colcon_meta' +[1.657s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/incremental) by extensions ['ros'] +[1.658s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/incremental) by extension 'ros' +[1.658s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/incremental) by extensions ['cmake', 'python'] +[1.658s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/incremental) by extension 'cmake' +[1.658s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/incremental) by extension 'python' +[1.659s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/incremental) by extensions ['python_setup_py'] +[1.659s] Level 1:colcon.colcon_core.package_identification:_identify(server/target/release/incremental) by extension 'python_setup_py' +[1.659s] Level 1:colcon.colcon_core.package_identification:_identify(snippets) by extensions ['ignore', 'ignore_ament_install'] +[1.660s] Level 1:colcon.colcon_core.package_identification:_identify(snippets) by extension 'ignore' +[1.660s] Level 1:colcon.colcon_core.package_identification:_identify(snippets) by extension 'ignore_ament_install' +[1.660s] Level 1:colcon.colcon_core.package_identification:_identify(snippets) by extensions ['colcon_pkg'] +[1.661s] Level 1:colcon.colcon_core.package_identification:_identify(snippets) by extension 'colcon_pkg' +[1.661s] Level 1:colcon.colcon_core.package_identification:_identify(snippets) by extensions ['colcon_meta'] +[1.661s] Level 1:colcon.colcon_core.package_identification:_identify(snippets) by extension 'colcon_meta' +[1.661s] Level 1:colcon.colcon_core.package_identification:_identify(snippets) by extensions ['ros'] +[1.661s] Level 1:colcon.colcon_core.package_identification:_identify(snippets) by extension 'ros' +[1.662s] Level 1:colcon.colcon_core.package_identification:_identify(snippets) by extensions ['cmake', 'python'] +[1.662s] Level 1:colcon.colcon_core.package_identification:_identify(snippets) by extension 'cmake' +[1.662s] Level 1:colcon.colcon_core.package_identification:_identify(snippets) by extension 'python' +[1.662s] Level 1:colcon.colcon_core.package_identification:_identify(snippets) by extensions ['python_setup_py'] +[1.663s] Level 1:colcon.colcon_core.package_identification:_identify(snippets) by extension 'python_setup_py' +[1.663s] Level 1:colcon.colcon_core.package_identification:_identify(syntaxes) by extensions ['ignore', 'ignore_ament_install'] +[1.664s] Level 1:colcon.colcon_core.package_identification:_identify(syntaxes) by extension 'ignore' +[1.664s] Level 1:colcon.colcon_core.package_identification:_identify(syntaxes) by extension 'ignore_ament_install' +[1.664s] Level 1:colcon.colcon_core.package_identification:_identify(syntaxes) by extensions ['colcon_pkg'] +[1.665s] Level 1:colcon.colcon_core.package_identification:_identify(syntaxes) by extension 'colcon_pkg' +[1.665s] Level 1:colcon.colcon_core.package_identification:_identify(syntaxes) by extensions ['colcon_meta'] +[1.665s] Level 1:colcon.colcon_core.package_identification:_identify(syntaxes) by extension 'colcon_meta' +[1.665s] Level 1:colcon.colcon_core.package_identification:_identify(syntaxes) by extensions ['ros'] +[1.665s] Level 1:colcon.colcon_core.package_identification:_identify(syntaxes) by extension 'ros' +[1.665s] Level 1:colcon.colcon_core.package_identification:_identify(syntaxes) by extensions ['cmake', 'python'] +[1.665s] Level 1:colcon.colcon_core.package_identification:_identify(syntaxes) by extension 'cmake' +[1.666s] Level 1:colcon.colcon_core.package_identification:_identify(syntaxes) by extension 'python' +[1.666s] Level 1:colcon.colcon_core.package_identification:_identify(syntaxes) by extensions ['python_setup_py'] +[1.666s] Level 1:colcon.colcon_core.package_identification:_identify(syntaxes) by extension 'python_setup_py' +[1.666s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) using defaults +[1.666s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) discover +[1.666s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) using defaults +[1.666s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) discover +[1.666s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) using defaults +[1.736s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) check parameters +[1.737s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) discover +[1.748s] DEBUG:colcon.colcon_installed_package_information.package_discovery:Found 394 installed packages in /opt/ros/kilted +[1.756s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) using defaults +[1.913s] INFO:colcon.colcon_core.executor:Executing jobs using 'parallel' executor +[1.916s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:run_until_complete +[1.916s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:closing loop +[1.917s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:loop closed +[1.917s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:run_until_complete finished with '0' +[1.917s] DEBUG:colcon.colcon_core.event_reactor:joining thread +[1.935s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.terminal_notifier': Not used on non-Darwin systems +[1.936s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.win32': Not used on non-Windows systems +[1.936s] INFO:colcon.colcon_notification.desktop_notification:Sending desktop notification using 'notify2' +[1.989s] DEBUG:colcon.colcon_core.event_reactor:joined thread +[1.997s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_core.shell.bat': Not used on non-Windows systems +[1.998s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/roy/Documents/vscode-urdf/install/local_setup.ps1' +[2.001s] INFO:colcon.colcon_core.shell:Creating prefix util module '/home/roy/Documents/vscode-urdf/install/_local_setup_util_ps1.py' +[2.004s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/roy/Documents/vscode-urdf/install/setup.ps1' +[2.008s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/roy/Documents/vscode-urdf/install/local_setup.sh' +[2.009s] INFO:colcon.colcon_core.shell:Creating prefix util module '/home/roy/Documents/vscode-urdf/install/_local_setup_util_sh.py' +[2.011s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/roy/Documents/vscode-urdf/install/setup.sh' +[2.015s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/roy/Documents/vscode-urdf/install/local_setup.bash' +[2.016s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/roy/Documents/vscode-urdf/install/setup.bash' +[2.019s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/roy/Documents/vscode-urdf/install/local_setup.zsh' +[2.020s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/roy/Documents/vscode-urdf/install/setup.zsh' diff --git a/log/latest b/log/latest new file mode 120000 index 0000000..b57d247 --- /dev/null +++ b/log/latest @@ -0,0 +1 @@ +latest_build \ No newline at end of file diff --git a/log/latest_build b/log/latest_build new file mode 120000 index 0000000..b8c29af --- /dev/null +++ b/log/latest_build @@ -0,0 +1 @@ +build_2026-05-24_23-00-34 \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..08dcb6b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,15 @@ +{ + "name": "urdf", + "version": "0.5.4", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "urdf", + "version": "0.5.4", + "engines": { + "vscode": "^1.82.0" + } + } + } +} diff --git a/package.json b/package.json index 26be01a..a58c211 100644 --- a/package.json +++ b/package.json @@ -1,45 +1,72 @@ { "name": "urdf", - "displayName": "URDF", - "description": "Support of URDF/xacro in VSCode", - "version": "0.3.0", - "publisher": "smilerobotics", + "displayName": "URDF / xacro Language Server", + "description": "URDF and xacro language server: diagnostics, completion, hover, go-to-definition, rename, inlay hints, quick-fixes.", + "version": "0.5.4", + "publisher": "Roy-Pichifkes", "engines": { - "vscode": "^1.18.0" + "vscode": "^1.82.0" }, "icon": "img/ros.png", - "extensionDependencies": [ - "xml" - ], "categories": [ - "Snippets" + "Programming Languages", + "Snippets", + "Linters" + ], + "main": "./client/out/extension.js", + "activationEvents": [ + "onLanguage:urdf" ], "repository": { "type": "git", - "url": "https://github.com/OTL/vscode-urdf.git" + "url": "https://github.com/pichifkes/vscode-urdf.git" }, "contributes": { "languages": [ { - "id": "xml", + "id": "urdf", "aliases": [ + "URDF", "urdf", - "URDF" + "xacro" ], "extensions": [ ".urdf", ".xacro" - ] + ], + "configuration": "./language-configuration.json" + } + ], + "grammars": [ + { + "language": "urdf", + "scopeName": "text.xml.urdf", + "path": "./syntaxes/urdf.tmLanguage.json" } ], "snippets": [ { - "language": "xml", + "language": "urdf", "path": "./snippets/snippets.json" } - ] + ], + "configurationDefaults": { + "[urdf]": { + "editor.quickSuggestions": { + "other": "on", + "comments": "off", + "strings": "on" + } + } + } }, - "devDependencies": { - "vscode": "^1.1.6" + "scripts": { + "install:client": "npm --prefix client install", + "build:client": "npm --prefix client run compile", + "build:server": "cargo build --manifest-path server/Cargo.toml", + "build:server:release": "cargo build --release --manifest-path server/Cargo.toml", + "stage:server": "mkdir -p server/bin && cp server/target/release/urdf-lsp server/bin/urdf-lsp && chmod +x server/bin/urdf-lsp", + "build": "npm run build:server && npm run build:client", + "package": "npm run build:client && npm run build:server:release && npm run stage:server && npx @vscode/vsce package --no-dependencies" } } diff --git a/server/Cargo.lock b/server/Cargo.lock new file mode 100644 index 0000000..9302259 --- /dev/null +++ b/server/Cargo.lock @@ -0,0 +1,776 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "auto_impl" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" + +[[package]] +name = "bytes" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-io" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" + +[[package]] +name = "futures-macro" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "icu_collections" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" + +[[package]] +name = "icu_properties" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" + +[[package]] +name = "icu_provider" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "litemap" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "lsp-types" +version = "0.94.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66bfd44a06ae10647fe3f8214762e9369fd4248df1350924b4ef9e770a85ea1" +dependencies = [ + "bitflags 1.3.2", + "serde", + "serde_json", + "serde_repr", + "url", +] + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project" +version = "1.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "potential_utf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +dependencies = [ + "zerovec", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.11.1", +] + +[[package]] +name = "roxmltree" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tinystr" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tokio" +version = "1.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +dependencies = [ + "pin-project-lite", + "tokio-macros", +] + +[[package]] +name = "tokio-macros" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-util" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-lsp" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4ba052b54a6627628d9b3c34c176e7eda8359b7da9acd497b9f20998d118508" +dependencies = [ + "async-trait", + "auto_impl", + "bytes", + "dashmap", + "futures", + "httparse", + "lsp-types", + "memchr", + "serde", + "serde_json", + "tokio", + "tokio-util", + "tower", + "tower-lsp-macros", + "tracing", +] + +[[package]] +name = "tower-lsp-macros" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84fd902d4e0b9a4b27f2f440108dc034e1758628a9b702f8ec61ad66355422fa" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "urdf-lsp" +version = "0.1.0" +dependencies = [ + "roxmltree", + "tokio", + "tower-lsp", +] + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", + "serde_derive", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "writeable" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" + +[[package]] +name = "yoke" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/server/Cargo.toml b/server/Cargo.toml new file mode 100644 index 0000000..d996935 --- /dev/null +++ b/server/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "urdf-lsp" +version = "0.1.0" +edition = "2021" +description = "Language server for URDF/xacro robot description files" +license = "MIT" + +[[bin]] +name = "urdf-lsp" +path = "src/main.rs" + +[dependencies] +tower-lsp = "0.20" +tokio = { version = "1", features = ["rt-multi-thread", "io-std", "macros"] } +roxmltree = "0.20" + +[profile.release] +lto = "thin" +codegen-units = 1 diff --git a/server/src/diagnostics.rs b/server/src/diagnostics.rs new file mode 100644 index 0000000..f6a7eb3 --- /dev/null +++ b/server/src/diagnostics.rs @@ -0,0 +1,1751 @@ +use std::borrow::Cow; +use tower_lsp::lsp_types::{Diagnostic, DiagnosticSeverity, Range}; +use crate::document::Document; +use crate::workspace::WorkspaceIndex; + +/// Type-kind tag for a Gazebo property element, used by `validate_gazebo_text`. +#[derive(Copy, Clone)] +pub enum GazeboPropKind { + Float, + NonNegFloat, + PositiveFloat, + Bool, + Int, + AnyString, + Lenient, +} + +/// Canonical Gazebo property schema — **single source of truth**. +/// +/// Each entry is `(element_name, value_type)`. Everything else in the codebase +/// that talks about Gazebo property elements derives from this table: +/// +/// **Consumers (read from this table):** +/// - `known_gazebo_prop()` in this file → name → `GazeboPropKind` lookup +/// - `features::completion()` in `server/src/features.rs` → completion labels +/// inside a `` block +/// +/// **Consumer that cannot share data structurally (manual sync required):** +/// - `gazebo-prop-tag` regex alternation in `syntaxes/urdf.tmLanguage.json` +/// — JSON file, must be kept in sync by hand. There is no test asserting +/// equivalence (yet); if you add or rename a property here, update the +/// grammar regex too. +pub const GAZEBO_PROPS: &[(&str, GazeboPropKind)] = &[ + ("mu1", GazeboPropKind::NonNegFloat), + ("mu2", GazeboPropKind::NonNegFloat), + ("mu", GazeboPropKind::NonNegFloat), + ("kp", GazeboPropKind::PositiveFloat), + ("kd", GazeboPropKind::PositiveFloat), + ("maxVel", GazeboPropKind::NonNegFloat), + ("minDepth", GazeboPropKind::NonNegFloat), + ("maxContacts", GazeboPropKind::Int), + ("selfCollide", GazeboPropKind::Bool), + ("turnGravityOff", GazeboPropKind::Bool), + ("gravity", GazeboPropKind::Bool), + ("implicitSpringDamper", GazeboPropKind::Bool), + ("dampingFactor", GazeboPropKind::Float), + ("laserRetro", GazeboPropKind::Float), + ("material", GazeboPropKind::AnyString), + ("stopCfm", GazeboPropKind::NonNegFloat), + ("stopErp", GazeboPropKind::NonNegFloat), + ("fudgeFactor", GazeboPropKind::Float), + ("sensor", GazeboPropKind::Lenient), + ("plugin", GazeboPropKind::Lenient), +]; + +/// One URDF element together with its attribute schema. Shared by both +/// [`GEOMETRY_PRIMITIVES`] and [`URDF_ELEMENTS`]; do not construct these elsewhere. +pub struct UrdfElement { + pub name: &'static str, + /// Attributes that **must** be present (drives "missing required attribute" diagnostics). + pub required_attrs: &'static [&'static str], + /// All attributes that are recognised on this element (drives "unknown attribute" diagnostics). + /// Must be a superset of `required_attrs`. + pub known_attrs: &'static [&'static str], +} + +/// Canonical URDF geometry primitive schema — **single source of truth**. +/// +/// **Consumers (read from this table):** +/// - `required_urdf_attrs()` in this file → looks up `required_attrs` per primitive +/// - `known_urdf_attrs()` in this file → looks up `known_attrs` per primitive +/// +/// **Consumers that cannot share data structurally (manual sync required):** +/// - `geometry-tag` regex in `syntaxes/urdf.tmLanguage.json` +/// - `geometryFull` and `linkFull` snippet choice arrays in `snippets/snippets.json` +/// +/// (see `server/src/diagnostics.rs` for source — this is it.) +/// +/// Kept as a separate table from [`URDF_ELEMENTS`] because the grammar maps +/// geometry primitives to their own scope (`geometry-tag` → `support.type.urdf`) +/// — keeping the categories visibly distinct here mirrors that. +pub const GEOMETRY_PRIMITIVES: &[UrdfElement] = &[ + UrdfElement { name: "box", required_attrs: &["size"], known_attrs: &["size"] }, + UrdfElement { name: "cylinder", required_attrs: &["radius", "length"], known_attrs: &["radius", "length"] }, + UrdfElement { name: "sphere", required_attrs: &["radius"], known_attrs: &["radius"] }, + UrdfElement { name: "mesh", required_attrs: &["filename"], known_attrs: &["filename", "scale"] }, +]; + +/// Canonical URDF element schema (everything except the geometry primitives, +/// which live in [`GEOMETRY_PRIMITIVES`]) — **single source of truth**. +/// +/// **Consumers (read from this table):** +/// - `required_urdf_attrs()` in this file → looks up `required_attrs` per element +/// - `known_urdf_attrs()` in this file → looks up `known_attrs` per element; +/// a `None` lookup is what triggers the "Unknown URDF element" diagnostic +/// +/// **Consumers that cannot share data structurally (manual sync required):** +/// - Element-name alternations in `syntaxes/urdf.tmLanguage.json` (`container-tag`, +/// `structure-tag`, `material-tag`, `inertial-tag`, etc.) — each grammar rule +/// covers a category subset, not the whole list, so there's no 1:1 mapping +/// - Snippet bodies in `snippets/snippets.json` that hard-code element names +/// +/// (see `server/src/diagnostics.rs` for source — this is it.) +pub const URDF_ELEMENTS: &[UrdfElement] = &[ + UrdfElement { name: "robot", required_attrs: &[], known_attrs: &["name"] }, // name optional in xacro fragments + UrdfElement { name: "link", required_attrs: &["name"], known_attrs: &["name"] }, + UrdfElement { name: "joint", required_attrs: &["name", "type"], known_attrs: &["name", "type"] }, + UrdfElement { name: "visual", required_attrs: &[], known_attrs: &["name"] }, + UrdfElement { name: "collision", required_attrs: &[], known_attrs: &["name"] }, + UrdfElement { name: "inertial", required_attrs: &[], known_attrs: &[] }, + UrdfElement { name: "origin", required_attrs: &[], known_attrs: &["xyz", "rpy"] }, + UrdfElement { name: "geometry", required_attrs: &[], known_attrs: &[] }, + UrdfElement { name: "material", required_attrs: &[], known_attrs: &["name"] }, + UrdfElement { name: "color", required_attrs: &["rgba"], known_attrs: &["rgba"] }, + UrdfElement { name: "texture", required_attrs: &[], known_attrs: &["filename"] }, + UrdfElement { name: "mass", required_attrs: &["value"], known_attrs: &["value"] }, + UrdfElement { name: "inertia", required_attrs: &[], known_attrs: &["ixx", "ixy", "ixz", "iyy", "iyz", "izz"] }, + UrdfElement { name: "parent", required_attrs: &["link"], known_attrs: &["link"] }, + UrdfElement { name: "child", required_attrs: &["link"], known_attrs: &["link"] }, + UrdfElement { name: "axis", required_attrs: &[], known_attrs: &["xyz"] }, + UrdfElement { name: "limit", required_attrs: &[], known_attrs: &["lower", "upper", "effort", "velocity"] }, + UrdfElement { name: "dynamics", required_attrs: &[], known_attrs: &["damping", "friction"] }, + UrdfElement { name: "safety_controller", required_attrs: &[], known_attrs: &["soft_lower_limit", "soft_upper_limit", "k_position", "k_velocity"] }, + UrdfElement { name: "calibration", required_attrs: &[], known_attrs: &["rising", "falling"] }, + UrdfElement { name: "mimic", required_attrs: &["joint"], known_attrs: &["joint", "multiplier", "offset"] }, + UrdfElement { name: "transmission", required_attrs: &[], known_attrs: &["name"] }, + UrdfElement { name: "gazebo", required_attrs: &[], known_attrs: &["reference"] }, +]; + +/// Canonical URDF joint type values — **single source of truth**. +/// +/// **Consumers (read from this table):** +/// - `validate_attr_value()` in this file → arm for `("joint", "type")` +/// emits an error if `type=` is not one of these strings. +/// +/// **Consumers that cannot share data structurally (manual sync required):** +/// - `joint-type-value` regex in `syntaxes/urdf.tmLanguage.json` +/// - `joint` and `jointFull` snippet choice arrays in `snippets/snippets.json` +/// +/// (see `server/src/diagnostics.rs` for source — this is it.) +pub const JOINT_TYPES: &[&str] = &[ + "revolute", "continuous", "prismatic", "fixed", "floating", "planar", +]; + +/// Per-joint-type human-readable docs surfaced in completion items — +/// `(short_detail, markdown_documentation)`. Order matches [`JOINT_TYPES`]. +/// +/// **Consumer:** `features::completion()` attaches `detail` + `documentation` +/// to each joint-type item so users see what they're picking. The text is +/// distilled from the URDF spec (https://wiki.ros.org/urdf/XML/joint). +pub const JOINT_TYPE_DOCS: &[(&str, &str, &str)] = &[ + ( + "revolute", + "rotates around an axis, with limits", + "**revolute** — A hinge that rotates around `` between `` and ``.\n\nRequires `` with `lower`, `upper`, `effort`, `velocity`.", + ), + ( + "continuous", + "rotates around an axis, no limits", + "**continuous** — A hinge that rotates around `` with no angular bounds (e.g. a wheel).\n\nNo `` required; `effort`/`velocity` may still be set.", + ), + ( + "prismatic", + "slides along an axis, with limits", + "**prismatic** — A linear (sliding) joint along `` between `` and ``.\n\nRequires `` with `lower`, `upper`, `effort`, `velocity`.", + ), + ( + "fixed", + "rigid attachment, no motion", + "**fixed** — Not really a joint: all 6 DoF are locked. Use to rigidly weld two links together.\n\nNo `` or `` needed.", + ), + ( + "floating", + "free 6-DoF motion", + "**floating** — Allows motion in all 6 degrees of freedom (3 translations + 3 rotations).\n\nRarely used; most physics engines treat this as a free body.", + ), + ( + "planar", + "2-DoF motion in a plane", + "**planar** — Allows motion in the plane perpendicular to ``. 2 translational DoF, no rotation about the axis.", + ), +]; + +/// Run semantic checks on a parsed document. +/// +/// `ws` is the cross-workspace entity index (populated from all open and scanned +/// files). A reference not found in this file but present in `ws` is silently +/// suppressed — the entity lives in an included/companion file. Pass `None` for +/// fully isolated (no-workspace) analysis. +pub fn check( + doc: &Document, + text: &str, + ws: Option<&WorkspaceIndex>, +) -> Vec { + let mut diags: Vec = Vec::new(); + + let link_names: std::collections::HashSet<&str> = + doc.links.iter().map(|l| l.name.as_str()).collect(); + let joint_names: std::collections::HashSet<&str> = + doc.joints.iter().map(|j| j.name.as_str()).collect(); + + // In xacro files, links/joints may come from included files — use Warning + // for refs not found anywhere in the workspace. + let undef_severity = if doc.is_xacro { + DiagnosticSeverity::WARNING + } else { + DiagnosticSeverity::ERROR + }; + + // 1 & 2. Undefined link references in joints (parent and child) + for joint in &doc.joints { + if let Some(parent_ref) = &joint.parent { + if !link_names.contains(parent_ref.name.as_str()) + && !ws.is_some_and(|w| w.has_link(&parent_ref.name)) + { + diags.push(make_diag( + parent_ref.range, + undef_severity, + format!("Undefined link '{}'", parent_ref.name), + )); + } + } + if let Some(child_ref) = &joint.child { + if !link_names.contains(child_ref.name.as_str()) + && !ws.is_some_and(|w| w.has_link(&child_ref.name)) + { + diags.push(make_diag( + child_ref.range, + undef_severity, + format!("Undefined link '{}'", child_ref.name), + )); + } + } + + // 3. Undefined joint mimic reference + if let Some(mimic_ref) = &joint.mimic { + if !joint_names.contains(mimic_ref.name.as_str()) + && !ws.is_some_and(|w| w.has_joint(&mimic_ref.name)) + { + diags.push(make_diag( + mimic_ref.range, + undef_severity, + format!("Undefined joint '{}' in mimic", mimic_ref.name), + )); + } + } + + // Self-referential joint + if let (Some(p), Some(c)) = (&joint.parent, &joint.child) { + if p.name == c.name { + diags.push(make_diag( + joint.range, + DiagnosticSeverity::ERROR, + format!("Joint '{}' has the same link as parent and child", joint.name), + )); + } + } + + // Half-joints — URDF requires both and . Without them + // the kinematic-tree analysis drops the edge and the endpoints look + // isolated. Flag the joint instead. + if joint.parent.is_none() { + diags.push(make_diag( + joint.range, + DiagnosticSeverity::ERROR, + format!("Joint '{}' is missing required element", joint.name), + )); + } + if joint.child.is_none() { + diags.push(make_diag( + joint.range, + DiagnosticSeverity::ERROR, + format!("Joint '{}' is missing required element", joint.name), + )); + } + } + + // 4. Duplicate link names + { + let mut seen = std::collections::HashSet::new(); + for item in &doc.links { + if !seen.insert(item.name.as_str()) { + diags.push(make_diag( + item.range, + DiagnosticSeverity::ERROR, + format!("Duplicate link name '{}'", item.name), + )); + } + } + } + + // 5. Duplicate joint names + { + let mut seen = std::collections::HashSet::new(); + for item in &doc.joints { + if !seen.insert(item.name.as_str()) { + diags.push(make_diag( + item.range, + DiagnosticSeverity::ERROR, + format!("Duplicate joint name '{}'", item.name), + )); + } + } + } + + // 6. Kinematic tree: multiple roots, disconnected links, cycles. + // `ws` lets us suppress "isolated"/"disconnected" diagnostics for links + // wired up by a joint living in another file. Runs whenever there are + // joints (cycles are possible with one link and one self-loop joint). + if !doc.links.is_empty() && !doc.joints.is_empty() { + kinematic_tree_check(&doc, &mut diags, undef_severity, ws); + } + + // 7. Xacro macro calls must resolve to a `` + // somewhere in the workspace. + { + let macro_names: std::collections::HashSet<&str> = + doc.xacro_macros.iter().map(|m| m.name.as_str()).collect(); + for mref in &doc.xacro_macro_calls { + if !macro_names.contains(mref.name.as_str()) + && !ws.is_some_and(|w| w.has_macro(&mref.name)) + { + diags.push(make_diag( + mref.range, + undef_severity, + format!("Undefined xacro macro '{}'", mref.name), + )); + } + } + } + + // 8. Gazebo reference must point to a known link or joint + for gref in &doc.gazebo_refs { + let in_file = link_names.contains(gref.name.as_str()) || joint_names.contains(gref.name.as_str()); + let in_ws = ws.is_some_and(|w| w.has_link(&gref.name) || w.has_joint(&gref.name)); + if !in_file && !in_ws { + diags.push(make_diag( + gref.range, + undef_severity, + format!("Undefined link or joint '{}' in gazebo reference", gref.name), + )); + } + } + + // 7. Undefined xacro property references: scan text for ${varname} + { + let prop_names: std::collections::HashSet<&str> = + doc.xacro_properties.iter().map(|p| p.name.as_str()).collect(); + + let bytes = text.as_bytes(); + let mut i = 0; + while i + 1 < bytes.len() { + if bytes[i] == b'$' && bytes[i + 1] == b'{' { + let start = i; + let inner_start = i + 2; + // Scan for closing '}', aborting at attribute/element boundaries so + // an unclosed ${... doesn't silently swallow the rest of the file. + let mut j = inner_start; + let mut close: Option = None; + while j < bytes.len() { + match bytes[j] { + b'}' => { close = Some(j); break; } + b'"' | b'\'' | b'<' | b'\n' => break, + _ => j += 1, + } + } + if let Some(inner_end) = close { + let varname = &text[inner_start..inner_end]; + let is_complex = varname.contains(|c: char| { + matches!(c, ' ' | '+' | '-' | '*' | '/' | '(' | ')' | '.') + }); + if !varname.is_empty() && !is_complex { + // Simple single-identifier: ${varname} + if !prop_names.contains(varname) + && !ws.is_some_and(|w| w.has_prop(varname)) + { + let range = byte_range_to_lsp(text, start..inner_end + 1); + diags.push(make_diag( + range, + undef_severity, + format!("Undefined xacro property '{}'", varname), + )); + } + } else if is_complex { + // Complex expression: extract every identifier and check each one. + let expr = varname.as_bytes(); + let mut k = 0; + while k < expr.len() { + if expr[k].is_ascii_alphabetic() || expr[k] == b'_' { + let id_start = k; + while k < expr.len() + && (expr[k].is_ascii_alphanumeric() || expr[k] == b'_') + { + k += 1; + } + let id = &varname[id_start..k]; + if matches!( + id, + "pi" | "sin" | "cos" | "tan" | "abs" + | "sqrt" | "radians" | "degrees" + ) { + continue; + } + if !prop_names.contains(id) + && !ws.is_some_and(|w| w.has_prop(id)) + { + let byte_start = inner_start + id_start; + let byte_end = inner_start + k; + let range = byte_range_to_lsp(text, byte_start..byte_end); + diags.push(make_diag( + range, + undef_severity, + format!("Undefined xacro property '{}'", id), + )); + } + } else { + k += 1; + } + } + } + i = inner_end + 1; + } else { + let range = byte_range_to_lsp(text, start..j); + diags.push(make_diag( + range, + DiagnosticSeverity::ERROR, + "Unclosed xacro expression: missing '}'".to_string(), + )); + i = j; + } + continue; + } + i += 1; + } + } + + diags +} + +fn kinematic_tree_check( + doc: &Document, + diags: &mut Vec, + severity: DiagnosticSeverity, + ws: Option<&WorkspaceIndex>, +) { + // Build parent→children adjacency and the set of all child link names. + let mut adj: std::collections::HashMap<&str, Vec<&str>> = std::collections::HashMap::new(); + let mut child_set: std::collections::HashSet<&str> = std::collections::HashSet::new(); + for joint in &doc.joints { + if let (Some(p), Some(c)) = (&joint.parent, &joint.child) { + adj.entry(p.name.as_str()).or_default().push(c.name.as_str()); + child_set.insert(c.name.as_str()); + } + } + + // Isolated links: no parent joint AND no child joints in *this file*. + // Suppress when the workspace shows the link is wired up elsewhere. + for link in doc.links.iter() + .filter(|l| !child_set.contains(l.name.as_str()) && !adj.contains_key(l.name.as_str())) + .filter(|l| !ws.is_some_and(|w| w.link_touched_by_joint(&l.name))) + { + diags.push(make_diag( + link.range, + severity, + format!("Link '{}' has no joints — not connected to the kinematic tree", link.name), + )); + } + + // Root links: no parent joint, but DO have children (i.e., appear as joint parents). + let roots: Vec<&str> = doc.links.iter() + .filter(|l| !child_set.contains(l.name.as_str()) && adj.contains_key(l.name.as_str())) + .map(|l| l.name.as_str()) + .collect(); + + // Multiple roots — flag every root so the user can pick which one to delete/fix + // rather than chasing a document-order-dependent diagnostic. + if roots.len() > 1 { + for link in doc.links.iter() + .filter(|l| !child_set.contains(l.name.as_str()) && adj.contains_key(l.name.as_str())) + { + diags.push(make_diag( + link.range, + severity, + format!( + "Link '{}' is a root (no parent joint); kinematic tree must have exactly one root", + link.name + ), + )); + } + } + + // DFS in two passes so pure cycles (no incoming-edge-free node) still get + // detected. Pass 1 seeds from roots — finds cycles reachable from a root. + // Pass 2 seeds from any link the first pass didn't visit — that's only + // possible if it sits inside a pure cycle, since every non-cycle node is + // reachable from at least one root. + let mut visited: std::collections::HashSet<&str> = std::collections::HashSet::new(); + let mut on_path: std::collections::HashSet<&str> = std::collections::HashSet::new(); + let mut stack: Vec<(&str, usize)> = Vec::new(); + let mut reported_cycle_joints: std::collections::HashSet = std::collections::HashSet::new(); + + let pass1_seeds: Vec<&str> = doc.links.iter() + .filter(|l| !child_set.contains(l.name.as_str())) + .map(|l| l.name.as_str()) + .collect(); + let pass2_seeds: Vec<&str> = doc.links.iter() + .map(|l| l.name.as_str()) + .collect(); + + for seeds in [pass1_seeds, pass2_seeds] { + for &seed in &seeds { + if visited.contains(seed) { + continue; + } + stack.push((seed, 0)); + on_path.insert(seed); + + while !stack.is_empty() { + let last = stack.len() - 1; + let (node, idx) = stack[last]; + let kids: &[&str] = adj.get(node).map(|v| v.as_slice()).unwrap_or(&[]); + + if idx < kids.len() { + stack[last].1 += 1; + let kid = kids[idx]; + + if on_path.contains(kid) { + // Back edge — report the joint that closes the cycle, once. + if let Some((j_idx, joint)) = doc.joints.iter().enumerate().find(|(_, j)| { + j.parent.as_ref().map_or(false, |p| p.name == node) + && j.child.as_ref().map_or(false, |c| c.name == kid) + }) { + if reported_cycle_joints.insert(j_idx) { + diags.push(make_diag( + joint.range, + DiagnosticSeverity::ERROR, + format!("Joint '{}' creates a cycle in the kinematic tree", joint.name), + )); + } + } + } else if !visited.contains(kid) { + on_path.insert(kid); + stack.push((kid, 0)); + } + } else { + visited.insert(node); + on_path.remove(node); + stack.pop(); + } + } + } + } +} + +// --------------------------------------------------------------------------- +// Schema validation: unknown element names and unknown attributes +// --------------------------------------------------------------------------- + +pub fn check_schema( + xml: &roxmltree::Document, + text: &str, + is_xacro: bool, + ws: Option<&WorkspaceIndex>, +) -> Vec { + let mut props: std::collections::HashMap<&str, &str> = std::collections::HashMap::new(); + for node in xml.root_element().children() { + if node.is_element() { + let tag = node.tag_name(); + if tag.name() == "property" && tag.namespace().map_or(false, |n| n.contains("xacro")) { + if let (Some(name), Some(value)) = (node.attribute("name"), node.attribute("value")) { + props.insert(name, value); + } + } + } + } + + let soft_severity = if is_xacro { + DiagnosticSeverity::WARNING + } else { + DiagnosticSeverity::ERROR + }; + + let mut diags = vec![]; + let mut defined_materials: std::collections::HashSet<&str> = std::collections::HashSet::new(); + let mut material_refs: Vec<(roxmltree::Node, String)> = Vec::new(); + collect_materials(xml.root_element(), &mut defined_materials, &mut material_refs); + for (node, name) in material_refs { + if !defined_materials.contains(name.as_str()) + && !ws.is_some_and(|w| w.has_material(&name)) + { + let range = attr_value_range_for(text, &node, "name"); + diags.push(make_diag( + range, + soft_severity, + format!("Undefined material '{name}'"), + )); + } + } + + walk_schema(xml.root_element(), text, &mut diags, false, &props, soft_severity); + diags +} + +/// Walk the tree gathering material definitions (any `` +/// containing a `` or `` child) and reference-only uses +/// (`` with no such child). Mirrors urdf_parser's two-pass +/// resolution: a reference inside `` resolves against any inline or +/// top-level definition anywhere in the document, regardless of order. +fn collect_materials<'a>( + node: roxmltree::Node<'a, 'a>, + defined: &mut std::collections::HashSet<&'a str>, + refs: &mut Vec<(roxmltree::Node<'a, 'a>, String)>, +) { + if !node.is_element() { + return; + } + if node.tag_name().name() == "material" && !is_xacro_element(&node) { + if let Some(name) = node.attribute("name") { + let has_def_child = node.children().any(|c| { + c.is_element() + && matches!(c.tag_name().name(), "color" | "texture") + && !is_xacro_element(&c) + }); + if has_def_child { + defined.insert(name); + } else { + refs.push((node, name.to_string())); + } + } + } + for child in node.children() { + collect_materials(child, defined, refs); + } +} + +fn attr_value_range_for(text: &str, node: &roxmltree::Node, attr_name: &str) -> Range { + crate::document::attr_value_range(text, node, attr_name) +} + +fn walk_schema( + node: roxmltree::Node, + text: &str, + diags: &mut Vec, + skip: bool, + props: &std::collections::HashMap<&str, &str>, + soft_severity: DiagnosticSeverity, +) { + if node.is_text() { + if !skip { + let content = node.text().unwrap_or("").trim(); + if !content.is_empty() { + let range = byte_range_to_lsp(text, node.range()); + diags.push(make_diag( + range, + DiagnosticSeverity::WARNING, + "Unexpected text content in URDF element".to_string(), + )); + } + } + return; + } + if !node.is_element() { + return; + } + + let tag = node.tag_name().name(); + let is_xacro = is_xacro_element(&node); + let child_skip = skip || is_xacro || matches!(tag, "plugin" | "sensor" | "transmission"); + + if !skip && !is_xacro { + match known_urdf_attrs(tag) { + Some(valid_attrs) => { + for attr in node.attributes() { + let aname = attr.name(); + if aname == "xmlns" || aname.starts_with("xmlns:") { + continue; + } + if !valid_attrs.contains(&aname) { + let range = attr_name_range(text, &node, aname); + diags.push(make_diag( + range, + DiagnosticSeverity::WARNING, + format!("Unknown attribute '{aname}' on element <{tag}>"), + )); + } + } + + for req in required_urdf_attrs(tag) { + if node.attribute(*req).is_none() { + let range = elem_name_range(text, &node); + diags.push(make_diag( + range, + DiagnosticSeverity::ERROR, + format!("Element <{tag}> is missing required attribute '{req}'"), + )); + } + } + + for attr in node.attributes() { + let aname = attr.name(); + if aname == "xmlns" || aname.starts_with("xmlns:") { + continue; + } + if let Some(msg) = validate_attr_value(tag, aname, attr.value(), props) { + let range = attr_name_range(text, &node, aname); + diags.push(make_diag(range, DiagnosticSeverity::ERROR, msg)); + } + } + + // Revolute and prismatic joints require a child; + // urdf_parser refuses to load the model otherwise. + if tag == "joint" { + if let Some(t) = node.attribute("type") { + if let Some(effective) = resolve_effective(t, props) { + let kind = effective.trim(); + if matches!(kind, "revolute" | "prismatic") { + let has_limit = node.children().any(|c| { + c.is_element() + && c.tag_name().name() == "limit" + && !is_xacro_element(&c) + }); + if !has_limit { + let range = elem_name_range(text, &node); + diags.push(make_diag( + range, + soft_severity, + format!( + "Joint of type '{kind}' is missing required element" + ), + )); + } + } + } + } + } + } + None => { + let range = elem_name_range(text, &node); + diags.push(make_diag( + range, + DiagnosticSeverity::WARNING, + format!("Unknown URDF element <{tag}>"), + )); + } + } + } + + if tag == "gazebo" && !skip && !is_xacro { + for child in node.children() { + walk_gazebo_child(child, text, diags, props); + } + } else { + for child in node.children() { + walk_schema(child, text, diags, child_skip, props, soft_severity); + } + } +} + +/// Look up the value-type kind for a Gazebo property element name. +/// Derived from [`GAZEBO_PROPS`] — that table is the single source of truth. +fn known_gazebo_prop(tag: &str) -> Option { + GAZEBO_PROPS.iter().find(|(name, _)| *name == tag).map(|(_, kind)| *kind) +} + +fn walk_gazebo_child( + node: roxmltree::Node, + text: &str, + diags: &mut Vec, + props: &std::collections::HashMap<&str, &str>, +) { + if !node.is_element() || is_xacro_element(&node) { + return; + } + let tag = node.tag_name().name(); + match known_gazebo_prop(tag) { + None => { + let range = elem_name_range(text, &node); + diags.push(make_diag( + range, + DiagnosticSeverity::WARNING, + format!("Unknown Gazebo property <{tag}>"), + )); + } + Some(GazeboPropKind::Lenient) => {} + Some(kind) => { + let mut text_content = String::new(); + let mut text_range: Option> = None; + for child in node.children() { + if child.is_text() { + let t = child.text().unwrap_or(""); + if !t.trim().is_empty() { + text_content.push_str(t); + text_range = Some(child.range()); + } + } + } + let content = text_content.trim(); + if !content.is_empty() { + if let Some(tr) = text_range { + if let Some(msg) = validate_gazebo_text(tag, content, kind, props) { + diags.push(make_diag(byte_range_to_lsp(text, tr), DiagnosticSeverity::ERROR, msg)); + } + } + } + } + } +} + +fn validate_gazebo_text( + tag: &str, + content: &str, + kind: GazeboPropKind, + props: &std::collections::HashMap<&str, &str>, +) -> Option { + let effective = resolve_effective(content, props)?; + match kind { + GazeboPropKind::Float => expect_float(&effective, tag), + GazeboPropKind::NonNegFloat => expect_non_neg_float(&effective, tag), + GazeboPropKind::PositiveFloat => expect_positive_float(&effective, tag), + GazeboPropKind::Bool => expect_bool(&effective, tag), + GazeboPropKind::Int => { + if effective.trim().parse::().is_err() { + Some(format!("'{tag}' must be an integer, got '{}'", effective.trim())) + } else { None } + } + GazeboPropKind::AnyString | GazeboPropKind::Lenient => None, + } +} + +/// Look up the required attributes for a URDF element. Derived from +/// [`GEOMETRY_PRIMITIVES`] and [`URDF_ELEMENTS`] — those tables are the +/// single source of truth. Unknown elements return `&[]`. +fn required_urdf_attrs(element: &str) -> &'static [&'static str] { + if let Some(e) = GEOMETRY_PRIMITIVES.iter().find(|e| e.name == element) { + return e.required_attrs; + } + URDF_ELEMENTS.iter() + .find(|e| e.name == element) + .map(|e| e.required_attrs) + .unwrap_or(&[]) +} + +fn validate_attr_value( + element: &str, + attr: &str, + value: &str, + props: &std::collections::HashMap<&str, &str>, +) -> Option { + let effective = resolve_effective(value, props)?; + match (element, attr) { + // Joint type must be one of the canonical values — see JOINT_TYPES above for source. + ("joint", "type") => { + let t = effective.trim(); + if JOINT_TYPES.iter().any(|v| *v == t) { + None + } else { + Some(format!( + "'type' must be one of {}, got '{t}'", + JOINT_TYPES.join(", "), + )) + } + } + (_, "xyz") | (_, "rpy") => expect_n_floats(&effective, 3, attr), + ("box", "size") => expect_n_floats(&effective, 3, attr) + .or_else(|| { + let ok = effective.split_whitespace() + .filter_map(|s| s.parse::().ok()) + .all(|f| f > 0.0); + if !ok { Some("'size' values must be positive".to_string()) } else { None } + }), + ("color", "rgba") => expect_n_floats(&effective, 4, attr) + .or_else(|| { + let vals: Vec = effective.split_whitespace() + .filter_map(|s| s.parse().ok()) + .collect(); + if vals.len() == 4 && vals.iter().any(|&f| f < 0.0 || f > 1.0) { + Some("'rgba' values must be between 0 and 1".into()) + } else { None } + }), + (_, "radius") | ("cylinder", "length") => expect_positive_float(&effective, attr), + (_, "lower") | (_, "upper") | (_, "effort") | (_, "velocity") + | (_, "damping") | (_, "friction") | (_, "value") + | (_, "ixx") | (_, "ixy") | (_, "ixz") | (_, "iyy") | (_, "iyz") | (_, "izz") + | (_, "multiplier") | (_, "offset") => expect_float(&effective, attr), + _ => None, + } +} + +/// Resolves xacro `${varname}` to the property value for simple single-identifier +/// substitutions. Returns `None` to signal "skip validation" when a `${` pattern +/// is present but unresolvable. Non-xacro values pass through as `Borrowed`. +fn resolve_effective<'a>( + value: &'a str, + props: &std::collections::HashMap<&str, &str>, +) -> Option> { + if value.contains("${") { + resolve_simple_xacro(value, props).map(Cow::Owned) + } else { + Some(Cow::Borrowed(value)) + } +} + +fn resolve_simple_xacro( + value: &str, + props: &std::collections::HashMap<&str, &str>, +) -> Option { + let v = value.trim(); + if !v.starts_with("${") || !v.ends_with('}') { + return None; + } + let inner = &v[2..v.len() - 1]; + if inner.contains(|c: char| matches!(c, '+' | '-' | '*' | '/' | '(' | ')' | ' ' | '\t')) { + return None; + } + let resolved = props.get(inner)?; + if resolved.contains("${") { + return None; + } + Some(resolved.to_string()) +} + +fn is_xacro_element(node: &roxmltree::Node) -> bool { + node.tag_name().namespace().map_or(false, |n| n.contains("xacro")) + || node.tag_name().name().starts_with("xacro:") +} + +fn expect_n_floats(value: &str, n: usize, attr: &str) -> Option { + let parts: Vec<&str> = value.split_whitespace().collect(); + if parts.len() != n { + return Some(format!("'{attr}' expects {n} numbers, got {}", parts.len())); + } + let bad: Vec<&str> = parts.iter().copied() + .filter(|s| s.parse::().is_err()) + .collect(); + if !bad.is_empty() { + return Some(format!("'{attr}' contains non-numeric value: '{}'", bad[0])); + } + None +} + +fn expect_float(value: &str, attr: &str) -> Option { + let trimmed = value.trim(); + if trimmed.parse::().is_err() { + Some(format!("'{attr}' must be a number, got '{trimmed}'")) + } else { None } +} + +fn expect_positive_float(value: &str, attr: &str) -> Option { + let trimmed = value.trim(); + match trimmed.parse::() { + Ok(f) if f > 0.0 => None, + Ok(_) => Some(format!("'{attr}' must be positive")), + Err(_) => Some(format!("'{attr}' must be a number, got '{trimmed}'")), + } +} + +fn expect_non_neg_float(value: &str, attr: &str) -> Option { + let trimmed = value.trim(); + match trimmed.parse::() { + Ok(f) if f >= 0.0 => None, + Ok(_) => Some(format!("'{attr}' must be non-negative")), + Err(_) => Some(format!("'{attr}' must be a number, got '{trimmed}'")), + } +} + +fn expect_bool(value: &str, attr: &str) -> Option { + match value.trim() { + "true" | "false" | "1" | "0" => None, + v => Some(format!("'{attr}' must be 'true' or 'false', got '{v}'")), + } +} + +/// Look up the recognised attributes for a URDF element. Derived from +/// [`GEOMETRY_PRIMITIVES`] and [`URDF_ELEMENTS`] — those tables are the +/// single source of truth. `None` indicates the element itself isn't a +/// known URDF element (which triggers the "Unknown URDF element" diagnostic). +fn known_urdf_attrs(element: &str) -> Option<&'static [&'static str]> { + if let Some(e) = GEOMETRY_PRIMITIVES.iter().find(|e| e.name == element) { + return Some(e.known_attrs); + } + URDF_ELEMENTS.iter() + .find(|e| e.name == element) + .map(|e| e.known_attrs) +} + +fn elem_name_range(text: &str, node: &roxmltree::Node) -> Range { + let start = node.range().start + 1; // skip '<' + let name = node.tag_name().name(); + byte_range_to_lsp(text, start..start + name.len()) +} + +fn attr_name_range(text: &str, node: &roxmltree::Node, attr_name: &str) -> Range { + let elem_range = node.range(); + let elem_src = &text[elem_range.clone()]; + let mut search = 0; + while search < elem_src.len() { + let Some(rel) = elem_src[search..].find(attr_name) else { + break; + }; + let abs = search + rel; + let prev_ok = abs == 0 || elem_src.as_bytes()[abs - 1].is_ascii_whitespace(); + let after = abs + attr_name.len(); + let next_ok = after < elem_src.len() + && matches!(elem_src.as_bytes()[after], b'=' | b' ' | b'\t' | b'\n' | b'\r'); + if prev_ok && next_ok { + let start = elem_range.start + abs; + return byte_range_to_lsp(text, start..start + attr_name.len()); + } + search = abs + 1; + } + elem_name_range(text, node) +} + +fn make_diag(range: Range, severity: DiagnosticSeverity, message: String) -> Diagnostic { + Diagnostic { + range, + severity: Some(severity), + source: Some(crate::document::DIAGNOSTIC_SOURCE.to_string()), + message, + ..Diagnostic::default() + } +} + +fn byte_range_to_lsp(text: &str, range: std::ops::Range) -> Range { + crate::document::byte_range_to_lsp(text, range) +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::document; + + fn diag_messages(text: &str) -> Vec { + let (doc, mut d) = document::parse(text); + d.extend(check(&doc, text, None)); + d.iter().map(|d| d.message.clone()).collect() + } + + #[test] + fn tree_isolated_link() { + // A link with no joints at all should be reported as "no joints" + let msgs = diag_messages(r#" + + + + + + + "#); + assert!(msgs.iter().any(|m| m.contains("orphan") && m.contains("no joints")), + "expected isolated-link diagnostic, got: {:?}", msgs); + } + + #[test] + fn tree_multiple_roots() { + let msgs = diag_messages(r#" + + + + + + + "#); + assert!(msgs.iter().any(|m| m.contains("root2") && m.contains("root")), + "expected multiple-roots diagnostic, got: {:?}", msgs); + } + + #[test] + fn tree_cycle() { + let msgs = diag_messages(r#" + + + + + + + "#); + assert!(msgs.iter().any(|m| m.contains("cycle")), + "expected cycle diagnostic, got: {:?}", msgs); + } + + #[test] + fn tag_mismatch_points_to_close_tag() { + // Open tag has a typo (), close tag is . + // Diagnostic lands on the close tag (line 3, 0-indexed) naming both sides, + // so the user can see what was open and what was written. + let text = "\n \n \n \n\n"; + let (_, diags) = document::parse(text); + assert_eq!(diags.len(), 1, "expected exactly one diagnostic, got {:?}", + diags.iter().map(|d| &d.message).collect::>()); + assert!(diags[0].message.contains("mateaaaaaaa") && diags[0].message.contains("material"), + "expected mismatch message naming both tags, got: {}", diags[0].message); + assert_eq!(diags[0].range.start.line, 3, "expected diagnostic on the closing tag line, got: {:?}", + diags[0].range); + } + + #[test] + fn tag_unclosed_mismatch_is_flagged() { + let text = "\n \n\n"; + let (_, diags) = document::parse(text); + assert!(diags.iter().any(|d| d.message.contains("never closed") || d.message.contains("Unexpected closing tag")), + "expected unclosed/mismatch diagnostic, got: {:?}", + diags.iter().map(|d| &d.message).collect::>()); + } + + #[test] + fn xml_parse_error_position_extracted_from_tail() { + // roxmltree 0.20 emits messages like "expected '=' not 'e' at 26:19". + // Position must be parsed from the tail, not from the start of the message. + let text = "\n \n \n\n"; + let (_, diags) = document::parse(text); + assert_eq!(diags.len(), 1, "expected one parse-error diagnostic"); + let d = &diags[0]; + assert!(d.message.contains("XML parse error"), + "expected XML parse error, got: {}", d.message); + assert_eq!(d.range.start.line, 2, + "expected diagnostic on line 2 (the line), got: {:?}", d.range); + } + + #[test] + fn document_colors_finds_rgba_attributes() { + let text = r#" + + +"#; + let colors = crate::features::document_colors(text); + assert_eq!(colors.len(), 2, "expected 2 rgba swatches"); + assert!((colors[0].color.red - 1.0).abs() < 1e-6); + assert!((colors[1].color.alpha - 0.5).abs() < 1e-6); + } + + #[test] + fn folding_ranges_cover_multiline_elements() { + let text = "\n \n \n \n \n \n \n \n \n\n"; + let ranges = crate::features::folding_ranges(text); + // Expected foldable elements (multi-line): robot (0..9), link (1..7), visual (2..6), geometry (3..5) + let starts: Vec = ranges.iter().map(|r| r.start_line).collect(); + assert!(starts.contains(&0), "robot should fold from line 0, got: {:?}", ranges); + assert!(starts.contains(&1), "link should fold from line 1, got: {:?}", ranges); + assert!(starts.contains(&2), "visual should fold from line 2, got: {:?}", ranges); + assert!(starts.contains(&3), "geometry should fold from line 3, got: {:?}", ranges); + // The single-line self-closing at line 8 should NOT produce a fold + assert!(!starts.contains(&8), "self-closing joint should not fold"); + } + + #[test] + fn xml_parse_failure_does_not_cascade_undefined_props() { + // Malformed XML elsewhere in the file must not turn every ${...} + // reference into a false "Undefined xacro property" — properties + // are defined at the top but parsing fails on the bad line, so + // doc.xacro_properties is empty. We rely on parse_ok to skip check(). + let text = r#" + + + + +"#; + let (doc, mut diags) = document::parse(text); + if doc.parse_ok { + diags.extend(check(&doc, text, None)); + } + let undef: Vec<_> = diags.iter().filter(|d| d.message.contains("Undefined xacro property")).collect(); + assert!(undef.is_empty(), + "no Undefined-xacro-property diagnostics should fire when XML parse fails, got: {:?}", + undef.iter().map(|d| &d.message).collect::>()); + } + + #[test] + fn unclosed_xacro_expression_is_flagged() { + let text = r#" + + + + +"#; + let (doc, mut d) = document::parse(text); + d.extend(check(&doc, text, None)); + assert!(d.iter().any(|m| m.message.contains("Unclosed xacro expression")), + "expected unclosed-expression diagnostic, got: {:?}", + d.iter().map(|x| &x.message).collect::>()); + // wheel_thickness should NOT be flagged as undefined + assert!(!d.iter().any(|m| m.message.contains("wheel_thickness") && m.message.contains("Undefined")), + "wheel_thickness should not be flagged"); + } + + #[test] + fn completion_inside_dollar_brace() { + use tower_lsp::lsp_types::Position; + let text = "\n \n \n \n \n \n"; + let (doc, _) = document::parse(text); + // Line 4 (0-indexed): " " + // Cursor right after the 'w' (before the closing '}') + let line = " "; + let col_after_w = line.find("${w").unwrap() + 3; // position right after 'w' + let pos = Position::new(4, col_after_w as u32); + let items = crate::features::completion(&doc, pos, text); + let labels: Vec<&str> = items.iter().map(|c| c.label.as_str()).collect(); + assert!(labels.contains(&"wheel_radius"), "expected wheel_radius in completions, got: {:?}", labels); + assert!(labels.contains(&"wheel_thickness"), "expected wheel_thickness in completions, got: {:?}", labels); + } + + #[test] + fn undefined_var_inside_complex_expression_is_flagged() { + let text = r#" + + + + + + + +"#; + let (doc, mut d) = document::parse(text); + d.extend(check(&doc, text, None)); + assert!( + d.iter().any(|m| m.message.contains("chassis_width") && m.message.contains("Undefined")), + "expected chassis_width to be flagged as undefined, got: {:?}", + d.iter().map(|x| &x.message).collect::>() + ); + assert!( + !d.iter().any(|m| m.message.contains("chassis_length") && m.message.contains("Undefined")), + "chassis_length is defined and must not be flagged" + ); + assert!( + !d.iter().any(|m| m.message.contains("chassis_mass") && m.message.contains("Undefined")), + "chassis_mass is defined and must not be flagged" + ); + } + + #[test] + fn builtins_in_complex_expression_not_flagged() { + let text = r#" + + + + + + +"#; + let (doc, mut d) = document::parse(text); + d.extend(check(&doc, text, None)); + assert!( + !d.iter().any(|m| m.message.contains("Undefined")), + "sin/pi are builtins and must not be flagged, got: {:?}", + d.iter().map(|x| &x.message).collect::>() + ); + } + + #[test] + fn inlay_hints_on_math_expressions() { + use tower_lsp::lsp_types::{Position, Range}; + let text = r#" + + + + + + + + + +"#; + let (doc, _) = document::parse(text); + let full = Range::new(Position::new(0, 0), Position::new(100, 0)); + let hints = crate::features::inlay_hints(&doc, text, full); + // Expect two hints: 0.335/2 = 0.1675 and 0.265/2 = 0.1325 + assert_eq!(hints.len(), 2, "expected 2 hints, got {:?}", hints.iter().map(|h| &h.label).collect::>()); + let labels: Vec = hints.iter().map(|h| match &h.label { + tower_lsp::lsp_types::InlayHintLabel::String(s) => s.clone(), + _ => String::new(), + }).collect(); + assert!(labels.iter().any(|l| l.contains("0.1675")), "expected 0.1675, got: {:?}", labels); + assert!(labels.iter().any(|l| l.contains("0.1325")), "expected 0.1325, got: {:?}", labels); + } + + #[test] + fn urdf_element_unknown_attribute_is_flagged() { + // `` — foo is not in URDF_ELEMENTS' entry for `link`. + let text = r#" + + "#; + let xml = roxmltree::Document::parse(text).unwrap(); + let diags = check_schema(&xml, text, false, None); + assert!( + diags.iter().any(|d| d.message.contains("Unknown attribute 'foo'") && d.message.contains("")), + "expected unknown-attribute diagnostic on , got: {:?}", + diags.iter().map(|d| &d.message).collect::>(), + ); + } + + #[test] + fn urdf_element_unknown_element_is_flagged() { + // `` isn't in URDF_ELEMENTS or GEOMETRY_PRIMITIVES → known_urdf_attrs + // returns None → "Unknown URDF element" diagnostic. + let text = r#" + + "#; + let xml = roxmltree::Document::parse(text).unwrap(); + let diags = check_schema(&xml, text, false, None); + assert!( + diags.iter().any(|d| d.message.contains("Unknown URDF element") && d.message.contains("")), + "expected unknown-element diagnostic on , got: {:?}", + diags.iter().map(|d| &d.message).collect::>(), + ); + } + + #[test] + fn urdf_element_missing_required_attr_via_table() { + // `` without `joint` — required_attrs comes from URDF_ELEMENTS entry. + let text = r#" + + + + + "#; + let xml = roxmltree::Document::parse(text).unwrap(); + let diags = check_schema(&xml, text, false, None); + assert!( + diags.iter().any(|d| d.message.contains("") && d.message.contains("'joint'")), + "expected missing-required-attr diagnostic on , got: {:?}", + diags.iter().map(|d| &d.message).collect::>(), + ); + } + + #[test] + fn geometry_primitive_missing_required_attr() { + // without size is invalid — confirms GEOMETRY_PRIMITIVES.required_attrs + // is wired through required_urdf_attrs(). + let text = r#" + + "#; + let xml = roxmltree::Document::parse(text).unwrap(); + let diags = check_schema(&xml, text, false, None); + assert!( + diags.iter().any(|d| d.message.contains("") && d.message.contains("'size'")), + "expected missing-size diagnostic, got: {:?}", + diags.iter().map(|d| &d.message).collect::>(), + ); + } + + #[test] + fn geometry_primitive_unknown_attr() { + // with `length` is invalid — confirms GEOMETRY_PRIMITIVES.known_attrs + // is wired through known_urdf_attrs(). + let text = r#" + + "#; + let xml = roxmltree::Document::parse(text).unwrap(); + let diags = check_schema(&xml, text, false, None); + assert!( + diags.iter().any(|d| d.message.contains("Unknown attribute 'length'") && d.message.contains("")), + "expected unknown-attribute diagnostic on sphere, got: {:?}", + diags.iter().map(|d| &d.message).collect::>(), + ); + } + + #[test] + fn joint_type_typo_is_flagged() { + // `rotational` is not a URDF joint type — must be flagged against JOINT_TYPES. + let text = r#" + + + + + + "#; + let (_, mut diags) = document::parse(text); + let xml = roxmltree::Document::parse(text).unwrap(); + diags.extend(check_schema(&xml, text, false, None)); + assert!( + diags.iter().any(|d| d.message.contains("'type' must be one of") && d.message.contains("rotational")), + "expected joint-type validator to flag 'rotational', got: {:?}", + diags.iter().map(|d| &d.message).collect::>(), + ); + } + + #[test] + fn joint_type_valid_value_passes() { + let text = r#" + + + + + + "#; + let xml = roxmltree::Document::parse(text).unwrap(); + let diags = check_schema(&xml, text, false, None); + assert!( + !diags.iter().any(|d| d.message.contains("'type' must be one of")), + "valid joint type should not be flagged, got: {:?}", + diags.iter().map(|d| &d.message).collect::>(), + ); + } + + #[test] + fn revolute_joint_missing_limit_is_flagged() { + // urdf_parser refuses to load a revolute joint without ; + // the LSP should catch this before runtime. + let text = r#" + + + + + + + "#; + let xml = roxmltree::Document::parse(text).unwrap(); + let diags = check_schema(&xml, text, false, None); + assert!( + diags.iter().any(|d| d.message.contains("revolute") && d.message.contains("")), + "expected missing-limit diagnostic on revolute joint, got: {:?}", + diags.iter().map(|d| &d.message).collect::>(), + ); + } + + #[test] + fn prismatic_joint_missing_limit_is_flagged() { + let text = r#" + + + + + + + "#; + let xml = roxmltree::Document::parse(text).unwrap(); + let diags = check_schema(&xml, text, false, None); + assert!( + diags.iter().any(|d| d.message.contains("prismatic") && d.message.contains("")), + "expected missing-limit diagnostic on prismatic joint, got: {:?}", + diags.iter().map(|d| &d.message).collect::>(), + ); + } + + #[test] + fn revolute_joint_with_limit_passes() { + let text = r#" + + + + + + + + "#; + let xml = roxmltree::Document::parse(text).unwrap(); + let diags = check_schema(&xml, text, false, None); + assert!( + !diags.iter().any(|d| d.message.contains("")), + "revolute with must not be flagged, got: {:?}", + diags.iter().map(|d| &d.message).collect::>(), + ); + } + + #[test] + fn continuous_joint_does_not_require_limit() { + // Only revolute and prismatic need a limit; continuous/fixed/floating do not. + let text = r#" + + + + + + + "#; + let xml = roxmltree::Document::parse(text).unwrap(); + let diags = check_schema(&xml, text, false, None); + assert!( + !diags.iter().any(|d| d.message.contains("")), + "continuous joint should not require , got: {:?}", + diags.iter().map(|d| &d.message).collect::>(), + ); + } + + #[test] + fn undefined_material_reference_is_flagged() { + // inside without a top-level or + // inline definition of "blue" should be flagged — urdf_parser warns + // "material 'blue' undefined" at runtime. + let text = r#" + + + + + + + "#; + let xml = roxmltree::Document::parse(text).unwrap(); + let diags = check_schema(&xml, text, false, None); + assert!( + diags.iter().any(|d| d.message.contains("Undefined material 'blue'")), + "expected undefined-material diagnostic, got: {:?}", + diags.iter().map(|d| &d.message).collect::>(), + ); + } + + #[test] + fn material_reference_resolved_by_top_level_definition() { + let text = r#" + + + + + + + + "#; + let xml = roxmltree::Document::parse(text).unwrap(); + let diags = check_schema(&xml, text, false, None); + assert!( + !diags.iter().any(|d| d.message.contains("Undefined material")), + "top-level definition should satisfy the reference, got: {:?}", + diags.iter().map(|d| &d.message).collect::>(), + ); + } + + #[test] + fn material_reference_resolved_by_inline_definition_elsewhere() { + // urdf_parser treats any inline `` + // as a global definition by name; a bare ref in another link should + // resolve to it regardless of document order. + let text = r#" + + + + + + + + + + + + + "#; + let xml = roxmltree::Document::parse(text).unwrap(); + let diags = check_schema(&xml, text, false, None); + assert!( + !diags.iter().any(|d| d.message.contains("Undefined material")), + "inline definition elsewhere should satisfy the reference, got: {:?}", + diags.iter().map(|d| &d.message).collect::>(), + ); + } + + #[test] + fn material_reference_resolved_by_workspace_index() { + // The current file only references "blue"; the definition lives in + // another file that has been indexed in the workspace. The reference + // must NOT be flagged. + use crate::workspace::{FileSummary, WorkspaceIndex}; + use tower_lsp::lsp_types::{Position, Range, Url}; + + let mut ws = WorkspaceIndex::default(); + ws.upsert( + Url::parse("file:///materials.urdf.xacro").unwrap(), + FileSummary { + materials: vec![( + "blue".into(), + Range::new(Position::new(0, 0), Position::new(0, 1)), + )], + ..Default::default() + }, + ); + + let text = r#" + + + + + + + +"#; + let xml = roxmltree::Document::parse(text).unwrap(); + let diags = check_schema(&xml, text, true, Some(&ws)); + assert!( + !diags.iter().any(|d| d.message.contains("Undefined material")), + "workspace-indexed material should satisfy the reference, got: {:?}", + diags.iter().map(|d| &d.message).collect::>(), + ); + } + + #[test] + fn xacro_softens_material_and_limit_diagnostics() { + // In xacro fragments, definitions may come from xacro:include or macros; + // missing material / missing limit should be Warning, not Error. + let text = r#" + + + + + + + + + + + + + +"#; + let xml = roxmltree::Document::parse(text).unwrap(); + let diags = check_schema(&xml, text, true, None); + let material_diag = diags.iter().find(|d| d.message.contains("Undefined material")); + let limit_diag = diags.iter().find(|d| d.message.contains("")); + assert!(material_diag.is_some(), "expected material diagnostic in xacro mode"); + assert!(limit_diag.is_some(), "expected limit diagnostic in xacro mode"); + assert_eq!(material_diag.unwrap().severity, Some(DiagnosticSeverity::WARNING)); + assert_eq!(limit_diag.unwrap().severity, Some(DiagnosticSeverity::WARNING)); + } + + #[test] + fn xacro_macro_call_with_definition_passes() { + // Macro defined in the same file → no diagnostic. + let text = r#" + + + + + +"#; + let (doc, mut diags) = document::parse(text); + diags.extend(check(&doc, text, None)); + assert!( + !diags.iter().any(|d| d.message.contains("Undefined xacro macro")), + "defined macro must not be flagged, got: {:?}", + diags.iter().map(|d| &d.message).collect::>(), + ); + } + + #[test] + fn undefined_xacro_macro_call_is_flagged() { + let text = r#" + + +"#; + let (doc, mut diags) = document::parse(text); + diags.extend(check(&doc, text, None)); + assert!( + diags.iter().any(|d| d.message.contains("Undefined xacro macro 'fenagle'")), + "expected undefined-macro diagnostic, got: {:?}", + diags.iter().map(|d| &d.message).collect::>(), + ); + } + + #[test] + fn xacro_macro_call_resolved_by_workspace_index() { + use crate::workspace::{FileSummary, WorkspaceIndex}; + use tower_lsp::lsp_types::{Position, Range, Url}; + + let mut ws = WorkspaceIndex::default(); + ws.upsert( + Url::parse("file:///macros.urdf.xacro").unwrap(), + FileSummary { + macros: vec![( + "wheel".into(), + Range::new(Position::new(0, 0), Position::new(0, 1)), + )], + ..Default::default() + }, + ); + let text = r#" + + +"#; + let (doc, mut diags) = document::parse(text); + diags.extend(check(&doc, text, Some(&ws))); + assert!( + !diags.iter().any(|d| d.message.contains("Undefined xacro macro")), + "workspace-indexed macro should satisfy the call, got: {:?}", + diags.iter().map(|d| &d.message).collect::>(), + ); + } + + #[test] + fn xacro_builtins_are_not_treated_as_macro_calls() { + // , , etc. are part of the xacro language, + // not macro invocations — they must never produce "Undefined macro". + let text = r#" + + + + + + + + + +"#; + let (doc, mut diags) = document::parse(text); + diags.extend(check(&doc, text, None)); + let undef: Vec<_> = diags.iter().filter(|d| d.message.contains("Undefined xacro macro")).collect(); + assert!(undef.is_empty(), + "built-in xacro tags must not be flagged as macro calls, got: {:?}", + undef.iter().map(|d| &d.message).collect::>()); + } + + #[test] + fn isolated_link_suppressed_by_cross_file_joint() { + // File-local view: link "lonely" has no joints in this file → would + // be flagged as isolated. But the workspace says some joint somewhere + // connects "lonely" — suppress. + use crate::workspace::{FileSummary, WorkspaceIndex}; + use tower_lsp::lsp_types::{Position, Range, Url}; + + let mut ws = WorkspaceIndex::default(); + ws.upsert( + Url::parse("file:///elsewhere.urdf.xacro").unwrap(), + FileSummary { + linked_by_joint: vec![( + "lonely".into(), + Range::new(Position::new(0, 0), Position::new(0, 1)), + )], + ..Default::default() + }, + ); + let text = r#" + + + + + + + +"#; + let (doc, mut diags) = document::parse(text); + diags.extend(check(&doc, text, Some(&ws))); + let lonely_diags: Vec<_> = diags.iter() + .filter(|d| d.message.contains("lonely") && (d.message.contains("no joints") || d.message.contains("not connected"))) + .collect(); + assert!(lonely_diags.is_empty(), + "cross-file joint should suppress isolated-link diagnostic, got: {:?}", + lonely_diags.iter().map(|d| &d.message).collect::>()); + } + + #[test] + fn tree_valid_chain() { + let msgs = diag_messages(r#" + + + + + + "#); + let tree_diags: Vec<_> = msgs.iter() + .filter(|m| m.contains("root") || m.contains("connected") || m.contains("cycle")) + .collect(); + assert!(tree_diags.is_empty(), "expected no tree diagnostics, got: {:?}", tree_diags); + } +} diff --git a/server/src/document.rs b/server/src/document.rs new file mode 100644 index 0000000..1518729 --- /dev/null +++ b/server/src/document.rs @@ -0,0 +1,720 @@ +use tower_lsp::lsp_types::{Diagnostic, DiagnosticSeverity, Position, Range}; + +/// How an opening tag terminated (return value of [`scan_to_tag_close`]). +pub(crate) enum TagCloseResult { + /// Saw `>` — element is open. `end` is the byte offset just past `>`. + Open { end: usize }, + /// Saw `/>` — element is self-closing. `end` is the byte offset just past `>`. + SelfClosing { end: usize }, + /// Reached end-of-input without seeing either (e.g. the tag is still being typed). + Unterminated, +} + +/// Walk `bytes` from `start` looking for the end of an XML opening tag, +/// honouring quoted attribute values so a `>` or `/` inside `attr="..."` +/// doesn't fool the scanner. Caller is responsible for positioning `start` +/// *after* the tag name (i.e. at the start of the attribute zone). +/// +/// **Single source of truth** for the quote-aware tag-end scan. +/// +/// **Consumers:** +/// - `scan_tag_balance()` in this file → push to stack on `Open`, skip on `SelfClosing` +/// - `find_opening_tag_end()` in this file → unwrap `end`, fall back to `bytes.len()` on `Unterminated` +/// - `inside_gazebo_block()` in `server/src/features.rs` → map `Open` → true, `SelfClosing` → false +pub(crate) fn scan_to_tag_close(bytes: &[u8], start: usize) -> TagCloseResult { + let mut i = start; + let mut in_quote: Option = None; + while i < bytes.len() { + let b = bytes[i]; + match in_quote { + Some(q) if b == q => in_quote = None, + Some(_) => {} + None => { + if b == b'"' || b == b'\'' { + in_quote = Some(b); + } else if b == b'/' && i + 1 < bytes.len() && bytes[i + 1] == b'>' { + return TagCloseResult::SelfClosing { end: i + 2 }; + } else if b == b'>' { + return TagCloseResult::Open { end: i + 1 }; + } + } + } + i += 1; + } + TagCloseResult::Unterminated +} + +/// Identifier set on every `Diagnostic.source` this server emits. +/// Editors use this to filter / group problems by which server produced them. +/// +/// **Consumers (read from this constant):** +/// - `parse()` → XML parse-error diagnostic in this file +/// - `diag_at()` → tag-balance fallback diagnostics in this file +/// - `make_diag()` in `server/src/diagnostics.rs` +/// +/// (see `server/src/document.rs` for source — this is it.) +pub(crate) const DIAGNOSTIC_SOURCE: &str = "urdf-lsp"; + +#[derive(Debug, Clone)] +pub struct Document { + pub links: Vec, + pub joints: Vec, + pub materials: Vec, + pub xacro_properties: Vec, + /// `reference` attribute values from `` elements. + pub gazebo_refs: Vec, + /// `` definitions found anywhere in the tree. + pub xacro_macros: Vec, + /// Call sites — every `` whose local name isn't a built-in + /// xacro element (macro / property / include / if / unless / arg / …). + pub xacro_macro_calls: Vec, + /// True when the root element declares xmlns:xacro — indicates a xacro fragment + /// where some links/joints may be defined in included files. + pub is_xacro: bool, + /// False when XML parsing failed — semantic checks (undefined refs, etc.) + /// must skip work, otherwise empty symbol tables flag everything as undefined. + pub parse_ok: bool, +} + +/// Element names under the `xacro:` namespace that are part of the xacro +/// language itself, not user-defined macro invocations. A `` whose +/// local name isn't in this list is treated as a call to a macro named `foo`. +pub(crate) const XACRO_BUILTINS: &[&str] = &[ + "macro", "property", "include", "if", "unless", "arg", + "insert_block", "element", "attribute", "call", +]; + +#[derive(Debug, Clone)] +pub struct XacroProperty { + pub name: String, + pub value: String, + pub range: Range, +} + +#[derive(Debug, Clone)] +pub struct NamedItem { + pub name: String, + pub range: Range, +} + +#[derive(Debug, Clone)] +pub struct Joint { + pub name: String, + pub range: Range, + pub joint_type: Option, + pub parent: Option, + pub child: Option, + pub mimic: Option, +} + +#[derive(Debug, Clone)] +pub struct NameRef { + pub name: String, + pub range: Range, +} + +pub fn parse(text: &str) -> (Document, Vec) { + let mut doc = Document { + links: Vec::new(), + joints: Vec::new(), + materials: Vec::new(), + xacro_properties: Vec::new(), + gazebo_refs: Vec::new(), + xacro_macros: Vec::new(), + xacro_macro_calls: Vec::new(), + is_xacro: false, + parse_ok: true, + }; + + let xml = match roxmltree::Document::parse(text) { + Ok(d) => d, + Err(e) => { + // Tag-balance scanner: when XML parsing fails, try to identify + // mismatched/unclosed tags ourselves so the diagnostic points at + // the actual misspelled opening tag, not the closing tag where + // roxmltree first noticed the inconsistency. + doc.parse_ok = false; + let balance_diags = scan_tag_balance(text); + if !balance_diags.is_empty() { + return (doc, balance_diags); + } + let msg = e.to_string(); + let (line, col) = parse_xml_error_pos(&msg); + let pos = Position::new(line, col); + let diag = Diagnostic { + range: Range::new(pos, Position::new(line, col + 1)), + severity: Some(DiagnosticSeverity::ERROR), + source: Some(DIAGNOSTIC_SOURCE.into()), + message: format!("XML parse error: {e}"), + ..Diagnostic::default() + }; + return (doc, vec![diag]); + } + }; + + let root = xml.root_element(); + + // roxmltree exposes `xmlns:*` declarations through `namespaces()`, not + // `attributes()`, so the old attribute-based detection was always false. + doc.is_xacro = root.namespaces().any(|n| { + n.name() == Some("xacro") || n.uri().contains("xacro") + }); + + for node in root.children() { + if !node.is_element() { + continue; + } + + let tag = node.tag_name().name(); + + match tag { + "link" => { + if let Some(name) = node.attribute("name") { + let range = attr_value_range(text, &node, "name"); + doc.links.push(NamedItem { + name: name.to_string(), + range, + }); + } + } + "joint" => { + if let Some(name) = node.attribute("name") { + let range = attr_value_range(text, &node, "name"); + let joint_type = node.attribute("type").map(|s| s.to_string()); + + let mut parent: Option = None; + let mut child: Option = None; + let mut mimic: Option = None; + + for child_node in node.children() { + if !child_node.is_element() { + continue; + } + match child_node.tag_name().name() { + "parent" => { + if let Some(link_name) = child_node.attribute("link") { + let r = attr_value_range(text, &child_node, "link"); + parent = Some(NameRef { + name: link_name.to_string(), + range: r, + }); + } + } + "child" => { + if let Some(link_name) = child_node.attribute("link") { + let r = attr_value_range(text, &child_node, "link"); + child = Some(NameRef { + name: link_name.to_string(), + range: r, + }); + } + } + "mimic" => { + if let Some(joint_name) = child_node.attribute("joint") { + let r = attr_value_range(text, &child_node, "joint"); + mimic = Some(NameRef { + name: joint_name.to_string(), + range: r, + }); + } + } + _ => {} + } + } + + doc.joints.push(Joint { + name: name.to_string(), + range, + joint_type, + parent, + child, + mimic, + }); + } + } + "material" => { + // Only top-level material definitions (those with a name attribute at robot level) + if let Some(name) = node.attribute("name") { + let range = attr_value_range(text, &node, "name"); + doc.materials.push(NamedItem { + name: name.to_string(), + range, + }); + } + } + "gazebo" => { + if let Some(reference) = node.attribute("reference") { + let range = attr_value_range(text, &node, "reference"); + doc.gazebo_refs.push(NameRef { + name: reference.to_string(), + range, + }); + } + } + _ => { + let full_name = node.tag_name(); + let is_xacro_property = (full_name.name() == "property" + && full_name.namespace() == Some("http://www.ros.org/wiki/xacro")) + || tag == "xacro:property"; + if is_xacro_property { + if let Some(name) = node.attribute("name") { + let range = attr_value_range(text, &node, "name"); + let value = node.attribute("value").unwrap_or("").to_string(); + doc.xacro_properties.push(XacroProperty { + name: name.to_string(), + value, + range, + }); + } + } + } + } + } + + // Macros (defs + calls) can be nested anywhere — macros call macros, calls + // appear inside ///etc. Walk the whole tree. + collect_xacro_macros(root, text, &mut doc); + + (doc, vec![]) +} + +fn collect_xacro_macros(node: roxmltree::Node, text: &str, doc: &mut Document) { + if !node.is_element() { + return; + } + let local = xacro_local_name(&node); + if let Some(local) = local { + match local { + "macro" => { + if let Some(name) = node.attribute("name") { + let range = attr_value_range(text, &node, "name"); + doc.xacro_macros.push(NamedItem { + name: name.to_string(), + range, + }); + } + } + // Calls are anything under `xacro:` that isn't a built-in. + other if !XACRO_BUILTINS.contains(&other) => { + let range = elem_name_range(text, &node); + doc.xacro_macro_calls.push(NameRef { + name: other.to_string(), + range, + }); + } + _ => {} + } + } + for child in node.children() { + collect_xacro_macros(child, text, doc); + } +} + +/// Return the local name iff `node` is in the xacro namespace (either via +/// `xmlns:xacro=...` or via the `xacro:` prefix syntax). +fn xacro_local_name<'a>(node: &roxmltree::Node<'a, 'a>) -> Option<&'a str> { + let tag = node.tag_name(); + if tag.namespace().map_or(false, |n| n.contains("xacro")) { + return Some(tag.name()); + } + // Fall back: roxmltree without a declared namespace keeps the prefix. + // Strictly speaking a well-formed xacro file declares xmlns:xacro, but + // be lenient. + let raw = tag.name(); + raw.strip_prefix("xacro:") +} + +fn elem_name_range(text: &str, node: &roxmltree::Node) -> Range { + // Skip the leading '<' and any namespace prefix so the range points at the + // local name the user types as the macro identifier. + let start = node.range().start + 1; + let name = node.tag_name().name(); + let bytes = text.as_bytes(); + // Walk past the prefix if present (`xacro:foo` → start at `foo`). + let mut name_start = start; + while name_start < bytes.len() && bytes[name_start] != b':' + && (bytes[name_start] as char).is_ascii_graphic() && bytes[name_start] != b' ' + && bytes[name_start] != b'>' && bytes[name_start] != b'/' + { + name_start += 1; + } + if name_start < bytes.len() && bytes[name_start] == b':' { + name_start += 1; + } else { + name_start = start; + } + byte_range_to_lsp(text, name_start..name_start + name.len()) +} + +/// Walk the document tracking opening/closing tag balance. Returns a single +/// diagnostic positioned on the actual misspelled (or unclosed) opening tag, +/// rather than at the closing tag where the inconsistency was detected. +/// Used as a fallback when roxmltree::Document::parse fails. +fn scan_tag_balance(text: &str) -> Vec { + let bytes = text.as_bytes(); + // Stack entries: (tag name, byte start of name, byte end of name) + let mut stack: Vec<(&str, usize, usize)> = Vec::new(); + let mut i = 0; + + while i < bytes.len() { + if bytes[i] != b'<' { + i += 1; + continue; + } + i += 1; + if i >= bytes.len() { + break; + } + + // or + if bytes[i] == b'?' { + i += 1; + while i + 1 < bytes.len() && !(bytes[i] == b'?' && bytes[i + 1] == b'>') { + i += 1; + } + i = (i + 2).min(bytes.len()); + continue; + } + + if bytes[i] == b'!' { + // Comment + if i + 2 < bytes.len() && bytes[i + 1] == b'-' && bytes[i + 2] == b'-' { + i += 3; + while i + 2 < bytes.len() + && !(bytes[i] == b'-' && bytes[i + 1] == b'-' && bytes[i + 2] == b'>') + { + i += 1; + } + i = (i + 3).min(bytes.len()); + continue; + } + // CDATA + if i + 7 < bytes.len() && &bytes[i + 1..i + 8] == b"[CDATA[" { + i += 8; + while i + 2 < bytes.len() + && !(bytes[i] == b']' && bytes[i + 1] == b']' && bytes[i + 2] == b'>') + { + i += 1; + } + i = (i + 3).min(bytes.len()); + continue; + } + // DOCTYPE or any other declaration — skip to '>' + while i < bytes.len() && bytes[i] != b'>' { + i += 1; + } + if i < bytes.len() { + i += 1; + } + continue; + } + + // Closing tag + if bytes[i] == b'/' { + i += 1; + let name_start = i; + while i < bytes.len() && is_name_char(bytes[i]) { + i += 1; + } + let name_end = i; + let name = &text[name_start..name_end]; + while i < bytes.len() && bytes[i] != b'>' { + i += 1; + } + if i < bytes.len() { + i += 1; + } + + match stack.pop() { + Some((open_name, _, _)) if open_name == name => {} + Some((open_name, _open_ns, _open_ne)) => { + return vec![diag_at( + text, + name_start..name_end, + format!( + "Unexpected closing tag : the open element is <{open_name}>" + ), + )]; + } + None => { + return vec![diag_at( + text, + name_start..name_end, + format!("Closing tag has no matching opening tag"), + )]; + } + } + continue; + } + + // Opening tag or + let name_start = i; + while i < bytes.len() && is_name_char(bytes[i]) { + i += 1; + } + let name_end = i; + let name = &text[name_start..name_end]; + if name.is_empty() { + continue; + } + + // Walk to '>' or '/>' via the canonical scanner. + let self_closing = match scan_to_tag_close(bytes, i) { + TagCloseResult::Open { end } => { i = end; false } + TagCloseResult::SelfClosing { end } => { i = end; true } + TagCloseResult::Unterminated => { i = bytes.len(); false } + }; + + if !self_closing { + stack.push((name, name_start, name_end)); + } + } + + // Anything left on the stack is an unclosed tag. + if let Some(&(open_name, open_ns, open_ne)) = stack.last() { + return vec![diag_at( + text, + open_ns..open_ne, + format!("Tag <{open_name}> is never closed"), + )]; + } + + Vec::new() +} + +fn is_name_char(b: u8) -> bool { + b.is_ascii_alphanumeric() || matches!(b, b'_' | b':' | b'-' | b'.') +} + +fn diag_at(text: &str, range: std::ops::Range, msg: String) -> Diagnostic { + Diagnostic { + range: byte_range_to_lsp(text, range), + severity: Some(DiagnosticSeverity::ERROR), + source: Some(DIAGNOSTIC_SOURCE.into()), + message: msg, + ..Diagnostic::default() + } +} + +/// Extract a (row, col) position from a roxmltree error message. +/// Handles both `ROW:COL message` (older format) and +/// `message at ROW:COL` (current 0.20 format). Returns 0-indexed (line, char); +/// falls back to (0, 0) when no position can be parsed. +fn parse_xml_error_pos(msg: &str) -> (u32, u32) { + if let Some(at) = msg.rfind(" at ") { + if let Some(pos) = parse_row_col(msg[at + 4..].trim()) { + return pos; + } + } + parse_row_col(msg).unwrap_or((0, 0)) +} + +fn parse_row_col(s: &str) -> Option<(u32, u32)> { + let mut parts = s.splitn(2, ':'); + let row: u32 = parts.next()?.trim().parse().ok()?; + let rest = parts.next()?.trim_start(); + let col_digits: String = rest.chars().take_while(|c| c.is_ascii_digit()).collect(); + let col: u32 = col_digits.parse().ok()?; + Some((row.saturating_sub(1), col.saturating_sub(1))) +} + +/// Get the LSP Range for the value of a named attribute on the given node. +/// Searches for the attribute value inside the element's source span. +/// Falls back to the node's own range if the value can't be located. +pub(crate) fn attr_value_range(text: &str, node: &roxmltree::Node, attr_name: &str) -> Range { + let value = match node.attribute(attr_name) { + Some(v) => v, + None => { + let span = node.range(); + return byte_range_to_lsp(text, span); + } + }; + + // The element's byte range in the source. + let elem_range = node.range(); + let elem_src = &text[elem_range.clone()]; + + // Restrict the search to the opening-tag header so a child element that + // happens to share the same `name="value"` pair doesn't get its span + // returned instead. The header ends at the first unquoted `>` or `/>`. + let header_end = find_opening_tag_end(elem_src); + let header = &elem_src[..header_end]; + + // Look for attr_name="value" or attr_name='value' inside the header only. + let needle_dq = format!("{}=\"{}\"", attr_name, value); + let needle_sq = format!("{}='{}'", attr_name, value); + + let offset = header + .find(needle_dq.as_str()) + .map(|pos| pos + attr_name.len() + 2) // skip name=" + .or_else(|| { + header + .find(needle_sq.as_str()) + .map(|pos| pos + attr_name.len() + 2) // skip name=' + }); + + if let Some(rel_start) = offset { + let start = elem_range.start + rel_start; + let end = start + value.len(); + byte_range_to_lsp(text, start..end) + } else { + // Fallback: use the element's span + byte_range_to_lsp(text, elem_range) + } +} + +/// Return the byte offset just past the first unquoted `>` or `/>` in `elem_src` +/// (i.e. the end of the opening-tag header). Falls back to `elem_src.len()` if +/// neither is found. Derived from [`scan_to_tag_close`] — the canonical +/// quote-aware tag-end scanner. +fn find_opening_tag_end(elem_src: &str) -> usize { + match scan_to_tag_close(elem_src.as_bytes(), 0) { + TagCloseResult::Open { end } | TagCloseResult::SelfClosing { end } => end, + TagCloseResult::Unterminated => elem_src.len(), + } +} + +/// Round `offset` down to the nearest UTF-8 char boundary (clamped to `text.len()`). +/// Used to guard against panics on slicing operations driven by externally-supplied +/// offsets (e.g. positions from the LSP client). +pub(crate) fn floor_char_boundary(text: &str, offset: usize) -> usize { + let mut i = offset.min(text.len()); + while i > 0 && !text.is_char_boundary(i) { + i -= 1; + } + i +} + +/// Convert a UTF-8 byte offset to an LSP `Position` (line + byte-offset within the line). +/// Assumes UTF-8 position encoding was negotiated in `initialize`; for clients that +/// stayed on UTF-16, the `character` value will be off for non-ASCII content but +/// will never panic. +pub(crate) fn byte_offset_to_position(text: &str, offset: usize) -> Position { + let safe = floor_char_boundary(text, offset); + let before = &text[..safe]; + let line = before.bytes().filter(|&b| b == b'\n').count() as u32; + let last_newline = before.rfind('\n').map(|p| p + 1).unwrap_or(0); + let character = (safe - last_newline) as u32; + Position { line, character } +} + +/// Convert an LSP `Position` to a UTF-8 byte offset. +/// Handles both `\n` and `\r\n` line endings (the `character` field never crosses a `\n`). +/// Floors to a char boundary so the returned offset is always safe to slice on. +pub(crate) fn position_to_byte_offset(text: &str, pos: Position) -> usize { + let bytes = text.as_bytes(); + let mut idx = 0usize; + let mut cur_line = 0u32; + while cur_line < pos.line && idx < bytes.len() { + if bytes[idx] == b'\n' { + cur_line += 1; + } + idx += 1; + } + let mut col = 0u32; + while idx < bytes.len() && bytes[idx] != b'\n' && col < pos.character { + idx += 1; + col += 1; + } + floor_char_boundary(text, idx) +} + +pub(crate) fn byte_range_to_lsp(text: &str, range: std::ops::Range) -> Range { + Range { + start: byte_offset_to_position(text, range.start), + end: byte_offset_to_position(text, range.end), + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn byte_offset_to_position_clamps_past_end() { + let text = "ab\ncd"; + let pos = byte_offset_to_position(text, 9999); + assert_eq!(pos, Position { line: 1, character: 2 }); + } + + #[test] + fn byte_offset_to_position_floors_to_char_boundary() { + // "héllo" — "é" is two bytes (0xC3 0xA9). Offset 2 lands mid-codepoint. + let text = "héllo"; + // Asking for offset 2 (mid-é) must not panic and must floor to 1. + let pos = byte_offset_to_position(text, 2); + assert_eq!(pos, Position { line: 0, character: 1 }); + } + + #[test] + fn position_to_byte_offset_handles_crlf() { + let text = "a\r\nb\r\nc"; + // line 2, char 0 → byte offset of 'c' + let off = position_to_byte_offset(text, Position { line: 2, character: 0 }); + assert_eq!(&text[off..], "c"); + } + + #[test] + fn position_to_byte_offset_clamps_at_line_end() { + let text = "ab\ncd"; + // Asking for character past EOL must clamp at \n, not cross into the next line. + let off = position_to_byte_offset(text, Position { line: 0, character: 99 }); + assert_eq!(off, 2); // position of the \n + } + + #[test] + fn position_to_byte_offset_floors_char_boundary_on_nonascii() { + // Even if a buggy client claims character=1 of "é" (which would be mid-codepoint + // in UTF-8), we must not panic and must return a safe byte offset. + let text = "é"; + let off = position_to_byte_offset(text, Position { line: 0, character: 1 }); + assert!(text.is_char_boundary(off)); + } + + #[test] + fn scan_to_tag_close_open_tag() { + let src = b"rest"; + let TagCloseResult::Open { end } = scan_to_tag_close(src, b""); + } + + #[test] + fn scan_to_tag_close_self_closing() { + let src = b"rest"; + let TagCloseResult::SelfClosing { end } = scan_to_tag_close(src, b""); + } + + #[test] + fn scan_to_tag_close_quoted_gt_inside_attr_does_not_terminate() { + // `>` inside a quoted attribute value must not be treated as the tag end. + let src = b"b\">rest"; + let TagCloseResult::Open { end } = scan_to_tag_close(src, b"b\">"); + } + + #[test] + fn scan_to_tag_close_quoted_slash_gt_does_not_self_close() { + // `/>` inside a quoted attribute value must not be treated as self-closing. + let src = b"b\">rest"; + let TagCloseResult::Open { end } = scan_to_tag_close(src, b"b\">"); + } + + #[test] + fn scan_to_tag_close_unterminated_when_no_close() { + let src = b" bool { + let line = pos.line; + let ch = pos.character; + if line < range.start.line || line > range.end.line { + return false; + } + if line == range.start.line && ch < range.start.character { + return false; + } + if line == range.end.line && ch > range.end.character { + return false; + } + true +} + +// --------------------------------------------------------------------------- +// 1. document_symbols +// --------------------------------------------------------------------------- + +pub fn document_symbols(doc: &Document) -> Vec { + let mut symbols: Vec = Vec::new(); + + for link in &doc.links { + #[allow(deprecated)] + symbols.push(DocumentSymbol { + name: format!("link: {}", link.name), + detail: None, + kind: SymbolKind::MODULE, + range: link.range, + selection_range: link.range, + children: None, + tags: None, + deprecated: None, + }); + } + + for joint in &doc.joints { + #[allow(deprecated)] + symbols.push(DocumentSymbol { + name: format!("joint: {}", joint.name), + detail: joint.joint_type.clone(), + kind: SymbolKind::EVENT, + range: joint.range, + selection_range: joint.range, + children: None, + tags: None, + deprecated: None, + }); + } + + for material in &doc.materials { + #[allow(deprecated)] + symbols.push(DocumentSymbol { + name: format!("material: {}", material.name), + detail: None, + kind: SymbolKind::CONSTANT, + range: material.range, + selection_range: material.range, + children: None, + tags: None, + deprecated: None, + }); + } + + for prop in &doc.xacro_properties { + #[allow(deprecated)] + symbols.push(DocumentSymbol { + name: format!("property: {}", prop.name), + detail: None, + kind: SymbolKind::VARIABLE, + range: prop.range, + selection_range: prop.range, + children: None, + tags: None, + deprecated: None, + }); + } + + symbols +} + +// --------------------------------------------------------------------------- +// 2. goto_definition +// --------------------------------------------------------------------------- + +pub fn goto_definition(doc: &Document, pos: Position) -> Option { + for joint in &doc.joints { + // parent → resolve in doc.links + if let Some(ref parent_ref) = joint.parent { + if pos_in_range(pos, parent_ref.range) { + return doc + .links + .iter() + .find(|l| l.name == parent_ref.name) + .map(|l| l.range); + } + } + + // child → resolve in doc.links + if let Some(ref child_ref) = joint.child { + if pos_in_range(pos, child_ref.range) { + return doc + .links + .iter() + .find(|l| l.name == child_ref.name) + .map(|l| l.range); + } + } + + // mimic → resolve in doc.joints + if let Some(ref mimic_ref) = joint.mimic { + if pos_in_range(pos, mimic_ref.range) { + return doc + .joints + .iter() + .find(|j| j.name == mimic_ref.name) + .map(|j| j.range); + } + } + } + + None +} + +// --------------------------------------------------------------------------- +// 3. hover +// --------------------------------------------------------------------------- + +fn hover_markdown(value: String) -> Hover { + Hover { + contents: HoverContents::Markup(MarkupContent { + kind: MarkupKind::Markdown, + value, + }), + range: None, + } +} + +pub fn hover(doc: &Document, pos: Position) -> Option { + // Check NameRefs inside joints first (parent / child / mimic). + // We resolve the target item and return hover for it. + for joint in &doc.joints { + if let Some(ref parent_ref) = joint.parent { + if pos_in_range(pos, parent_ref.range) { + return doc + .links + .iter() + .find(|l| l.name == parent_ref.name) + .map(|l| hover_markdown(format!("**Link** `{}`", l.name))); + } + } + + if let Some(ref child_ref) = joint.child { + if pos_in_range(pos, child_ref.range) { + return doc + .links + .iter() + .find(|l| l.name == child_ref.name) + .map(|l| hover_markdown(format!("**Link** `{}`", l.name))); + } + } + + if let Some(ref mimic_ref) = joint.mimic { + if pos_in_range(pos, mimic_ref.range) { + return doc.joints.iter().find(|j| j.name == mimic_ref.name).map( + |j| { + let type_str = j + .joint_type + .as_deref() + .unwrap_or("unknown type"); + hover_markdown(format!( + "**Joint** `{}` *(type: {})*", + j.name, type_str + )) + }, + ); + } + } + } + + // Check links + for link in &doc.links { + if pos_in_range(pos, link.range) { + return Some(hover_markdown(format!("**Link** `{}`", link.name))); + } + } + + // Check joints + for joint in &doc.joints { + if pos_in_range(pos, joint.range) { + let type_str = joint + .joint_type + .as_deref() + .unwrap_or("unknown type"); + return Some(hover_markdown(format!( + "**Joint** `{}` *(type: {})*", + joint.name, type_str + ))); + } + } + + // Check materials + for material in &doc.materials { + if pos_in_range(pos, material.range) { + return Some(hover_markdown(format!("**Material** `{}`", material.name))); + } + } + + // Check xacro properties + for prop in &doc.xacro_properties { + if pos_in_range(pos, prop.range) { + return Some(hover_markdown(format!("**Property** `{}`", prop.name))); + } + } + + None +} + +// --------------------------------------------------------------------------- +// name_at / range_and_name_at helpers + ItemKind +// --------------------------------------------------------------------------- + +#[derive(Debug, Copy, Clone, PartialEq, Eq)] +pub enum ItemKind { + Link, + Joint, +} + +/// Returns the resolved (target) name and its kind for whatever entity is at `pos`. +/// For a NameRef the returned name is the TARGET (the thing being referenced). +/// For a definition site (``) it returns the defined name itself. +/// Used by main.rs for cross-file goto-def and hover when same-file lookup fails. +pub fn entity_at(doc: &Document, pos: Position) -> Option<(String, ItemKind)> { + // 1. Walk joints: check NameRef ranges first. + for joint in &doc.joints { + if let Some(ref parent_ref) = joint.parent { + if pos_in_range(pos, parent_ref.range) { + return Some((parent_ref.name.clone(), ItemKind::Link)); + } + } + if let Some(ref child_ref) = joint.child { + if pos_in_range(pos, child_ref.range) { + return Some((child_ref.name.clone(), ItemKind::Link)); + } + } + if let Some(ref mimic_ref) = joint.mimic { + if pos_in_range(pos, mimic_ref.range) { + return Some((mimic_ref.name.clone(), ItemKind::Joint)); + } + } + } + + // 2. Walk doc.links + for link in &doc.links { + if pos_in_range(pos, link.range) { + return Some((link.name.clone(), ItemKind::Link)); + } + } + + // 3. Walk doc.joints + for joint in &doc.joints { + if pos_in_range(pos, joint.range) { + return Some((joint.name.clone(), ItemKind::Joint)); + } + } + + // 4. Materials and xacro_properties are not renameable yet. + None +} + +/// Returns the range WHERE THE CURSOR IS and the name at that range. +/// Checks NameRefs first, then NamedItems. +fn range_and_name_at(doc: &Document, pos: Position) -> Option<(Range, String)> { + // NameRefs in joints first. + for joint in &doc.joints { + if let Some(ref parent_ref) = joint.parent { + if pos_in_range(pos, parent_ref.range) { + return Some((parent_ref.range, parent_ref.name.clone())); + } + } + if let Some(ref child_ref) = joint.child { + if pos_in_range(pos, child_ref.range) { + return Some((child_ref.range, child_ref.name.clone())); + } + } + if let Some(ref mimic_ref) = joint.mimic { + if pos_in_range(pos, mimic_ref.range) { + return Some((mimic_ref.range, mimic_ref.name.clone())); + } + } + } + + // NamedItems. + for link in &doc.links { + if pos_in_range(pos, link.range) { + return Some((link.range, link.name.clone())); + } + } + for joint in &doc.joints { + if pos_in_range(pos, joint.range) { + return Some((joint.range, joint.name.clone())); + } + } + + None +} + +// --------------------------------------------------------------------------- +// 5. references +// --------------------------------------------------------------------------- + +pub fn references(doc: &Document, pos: Position) -> Vec { + let (name, kind) = match entity_at(doc, pos) { + Some(v) => v, + None => return vec![], + }; + + let mut ranges: Vec = Vec::new(); + + match kind { + ItemKind::Link => { + // Definition range from doc.links + if let Some(link) = doc.links.iter().find(|l| l.name == name) { + ranges.push(link.range); + } + // Every parent/child NameRef in doc.joints with that name + for joint in &doc.joints { + if let Some(ref parent_ref) = joint.parent { + if parent_ref.name == name { + ranges.push(parent_ref.range); + } + } + if let Some(ref child_ref) = joint.child { + if child_ref.name == name { + ranges.push(child_ref.range); + } + } + } + } + ItemKind::Joint => { + // Definition range from doc.joints + if let Some(joint) = doc.joints.iter().find(|j| j.name == name) { + ranges.push(joint.range); + } + // Every mimic NameRef with that name + for joint in &doc.joints { + if let Some(ref mimic_ref) = joint.mimic { + if mimic_ref.name == name { + ranges.push(mimic_ref.range); + } + } + } + } + } + + ranges +} + +// --------------------------------------------------------------------------- +// 6. prepare_rename +// --------------------------------------------------------------------------- + +pub fn prepare_rename(doc: &Document, pos: Position) -> Option<(Range, String)> { + range_and_name_at(doc, pos) +} + +// --------------------------------------------------------------------------- +// 7. rename +// --------------------------------------------------------------------------- + +pub fn rename(doc: &Document, pos: Position, new_name: &str) -> Vec<(Range, String)> { + references(doc, pos) + .into_iter() + .map(|r| (r, new_name.to_string())) + .collect() +} + +// --------------------------------------------------------------------------- +// 4. completion +// --------------------------------------------------------------------------- + +pub fn completion(doc: &Document, pos: Position, text: &str) -> Vec { + // Compute the cursor's byte offset directly (handles CRLF and non-ASCII safely) + // and derive the line prefix from that — slicing on `pos.character` as a byte + // index would panic mid-codepoint. + let cursor_offset = crate::document::position_to_byte_offset(text, pos); + let line_start = text[..cursor_offset].rfind('\n').map(|p| p + 1).unwrap_or(0); + let prefix = &text[line_start..cursor_offset]; + + // Enum completions: type= inside → offer all valid joint types, + // with per-type docs surfaced so the user can pick informed. + if find_attr_open(prefix, "type") { + if current_tag_name(text, cursor_offset).as_deref() == Some("joint") { + return crate::diagnostics::JOINT_TYPE_DOCS + .iter() + .map(|(name, detail, doc)| CompletionItem { + label: name.to_string(), + kind: Some(CompletionItemKind::ENUM_MEMBER), + detail: Some(detail.to_string()), + documentation: Some(Documentation::MarkupContent(MarkupContent { + kind: MarkupKind::Markdown, + value: doc.to_string(), + })), + ..CompletionItem::default() + }) + .collect(); + } + } + + let link_re = regex_match(prefix, r#"link\s*=\s*"[^"]*$"#); + let joint_re = regex_match(prefix, r#"joint\s*=\s*"[^"]*$"#); + let reference_re = regex_match(prefix, r#"reference\s*=\s*"[^"]*$"#); + let xacro_re = regex_match(prefix, r#"\$\{[^}]*$"#); + + if link_re { + doc.links + .iter() + .map(|l| CompletionItem { + label: l.name.clone(), + kind: Some(CompletionItemKind::REFERENCE), + ..CompletionItem::default() + }) + .collect() + } else if joint_re { + doc.joints + .iter() + .map(|j| CompletionItem { + label: j.name.clone(), + kind: Some(CompletionItemKind::REFERENCE), + ..CompletionItem::default() + }) + .collect() + } else if reference_re { + doc.links + .iter() + .map(|l| CompletionItem { + label: l.name.clone(), + kind: Some(CompletionItemKind::REFERENCE), + detail: Some("link".to_string()), + ..CompletionItem::default() + }) + .chain(doc.joints.iter().map(|j| CompletionItem { + label: j.name.clone(), + kind: Some(CompletionItemKind::REFERENCE), + detail: Some("joint".to_string()), + ..CompletionItem::default() + })) + .collect() + } else if xacro_re { + doc.xacro_properties + .iter() + .map(|p| CompletionItem { + label: p.name.clone(), + kind: Some(CompletionItemKind::VARIABLE), + ..CompletionItem::default() + }) + .collect() + } else { + // block → offer Gazebo property element names. + // The list of valid Gazebo properties is canonical in + // `diagnostics::GAZEBO_PROPS` — read names from there so completion stays + // in lockstep with validation. + if inside_gazebo_block(text, cursor_offset) && is_element_name_trigger(prefix) { + crate::diagnostics::GAZEBO_PROPS + .iter() + .map(|(name, _kind)| CompletionItem { + label: name.to_string(), + kind: Some(CompletionItemKind::PROPERTY), + ..CompletionItem::default() + }) + .collect() + } else { + vec![] + } + } +} + +/// Scan backwards through `text` from `cursor_offset` to find the name of the +/// innermost unclosed XML opening tag. Used to determine attribute-value +/// completion context (e.g. "are we inside a `` tag?"). +fn current_tag_name(text: &str, cursor_offset: usize) -> Option { + let before = &text[..cursor_offset.min(text.len())]; + let bytes = before.as_bytes(); + let mut i = bytes.len(); + while i > 0 { + i -= 1; + if bytes[i] != b'<' { + continue; + } + let after = i + 1; + if after >= bytes.len() { + continue; + } + // Skip closing tags , processing instructions , and comments ", + "name": "comment.block.xml", + "captures": { + "0": { "name": "punctuation.definition.comment.xml" } + } + }, + "prolog": { + "begin": "(<\\?)(xml)", + "beginCaptures": { + "1": { "name": "punctuation.definition.tag.xml" }, + "2": { "name": "entity.name.tag.xml" } + }, + "end": "(\\?>)", + "endCaptures": { + "1": { "name": "punctuation.definition.tag.xml" } + }, + "name": "meta.tag.preprocessor.xml", + "patterns": [{ "include": "#attribute" }] + }, + "xacro-tag": { + "begin": "(])", + "beginCaptures": { + "1": { "name": "punctuation.definition.tag.xml" }, + "2": { "name": "entity.name.function.xacro" } + }, + "end": "(/?>)", + "endCaptures": { "1": { "name": "punctuation.definition.tag.xml" } }, + "name": "meta.tag.xml", + "patterns": [{ "include": "#attribute" }] + }, + "container-tag": { + "begin": "(])", + "beginCaptures": { + "1": { "name": "punctuation.definition.tag.xml" }, + "2": { "name": "keyword.control.urdf" } + }, + "end": "(/?>)", + "endCaptures": { "1": { "name": "punctuation.definition.tag.xml" } }, + "name": "meta.tag.xml", + "patterns": [{ "include": "#attribute" }] + }, + "structure-tag": { + "begin": "(])", + "beginCaptures": { + "1": { "name": "punctuation.definition.tag.xml" }, + "2": { "name": "variable.parameter.urdf" } + }, + "end": "(/?>)", + "endCaptures": { "1": { "name": "punctuation.definition.tag.xml" } }, + "name": "meta.tag.xml", + "patterns": [{ "include": "#attribute" }] + }, + "subelement-tag": { + "begin": "(])", + "beginCaptures": { + "1": { "name": "punctuation.definition.tag.xml" }, + "2": { "name": "storage.type.urdf" } + }, + "end": "(/?>)", + "endCaptures": { "1": { "name": "punctuation.definition.tag.xml" } }, + "name": "meta.tag.xml", + "patterns": [{ "include": "#attribute" }] + }, + "material-tag": { + "begin": "(])", + "beginCaptures": { + "1": { "name": "punctuation.definition.tag.xml" }, + "2": { "name": "support.class.material.urdf" } + }, + "end": "(/?>)", + "endCaptures": { "1": { "name": "punctuation.definition.tag.xml" } }, + "name": "meta.tag.xml", + "patterns": [{ "include": "#attribute" }] + }, + "inertial-tag": { + "begin": "(])", + "beginCaptures": { + "1": { "name": "punctuation.definition.tag.xml" }, + "2": { "name": "support.function.inertial.urdf" } + }, + "end": "(/?>)", + "endCaptures": { "1": { "name": "punctuation.definition.tag.xml" } }, + "name": "meta.tag.xml", + "patterns": [{ "include": "#attribute" }] + }, + "geometry-tag": { + "comment": "Element-name alternation mirrors GEOMETRY_PRIMITIVES in server/src/diagnostics.rs (single source of truth). Update both when adding a new URDF geometry primitive.", + "begin": "(])", + "beginCaptures": { + "1": { "name": "punctuation.definition.tag.xml" }, + "2": { "name": "support.type.urdf" } + }, + "end": "(/?>)", + "endCaptures": { "1": { "name": "punctuation.definition.tag.xml" } }, + "name": "meta.tag.xml", + "patterns": [{ "include": "#attribute" }] + }, + "gazebo-prop-tag": { + "comment": "Element-name alternation mirrors GAZEBO_PROPS in server/src/diagnostics.rs (single source of truth). Update both when adding or renaming a Gazebo property.", + "begin": "(])", + "beginCaptures": { + "1": { "name": "punctuation.definition.tag.xml" }, + "2": { "name": "support.constant.gazebo" } + }, + "end": "(/?>)", + "endCaptures": { "1": { "name": "punctuation.definition.tag.xml" } }, + "name": "meta.tag.xml", + "patterns": [{ "include": "#attribute" }] + }, + "generic-tag": { + "begin": "()", + "endCaptures": { "1": { "name": "punctuation.definition.tag.xml" } }, + "name": "meta.tag.xml", + "patterns": [{ "include": "#attribute" }] + }, + "attribute": { + "patterns": [ + { + "match": "(name|link|joint|type|reference|rgba|xyz|rpy|size|radius|length|filename|scale|value|lower|upper|effort|velocity|damping|friction|multiplier|offset|ixx|ixy|ixz|iyy|iyz|izz|mass|x|y|z)(=)", + "captures": { + "1": { "name": "entity.other.attribute-name.urdf" }, + "2": { "name": "punctuation.separator.key-value.xml" } + } + }, + { + "match": "([A-Za-z_:][\\w:.-]*)(=)", + "captures": { + "1": { "name": "entity.other.attribute-name.xml" }, + "2": { "name": "punctuation.separator.key-value.xml" } + } + }, + { "include": "#string-double" }, + { "include": "#string-single" } + ] + }, + "string-double": { + "begin": "\"", + "end": "\"", + "name": "string.quoted.double.xml", + "patterns": [ + { "include": "#xacro-interpolation" }, + { "include": "#joint-type-value" } + ] + }, + "string-single": { + "begin": "'", + "end": "'", + "name": "string.quoted.single.xml", + "patterns": [ + { "include": "#xacro-interpolation" }, + { "include": "#joint-type-value" } + ] + }, + "joint-type-value": { + "comment": "Value alternation mirrors JOINT_TYPES in server/src/diagnostics.rs (single source of truth). Update both when adding a new URDF joint type.", + "match": "\\b(revolute|continuous|prismatic|fixed|floating|planar)\\b", + "name": "constant.language.urdf" + }, + "xacro-interpolation": { + "name": "meta.interpolation.xacro", + "match": "(\\$\\{)([^}]*)(\\})", + "captures": { + "1": { "name": "punctuation.definition.template-expression.begin" }, + "2": { "name": "variable.other.xacro" }, + "3": { "name": "punctuation.definition.template-expression.end" } + } + } + } +}