Skip to content

Commit

Permalink
pw_ide: Port compDB processing to TS
Browse files Browse the repository at this point in the history
Change-Id: I30c114b1b4be6d802cb747f986b660cb45758ec7
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/255555
Reviewed-by: Alexei Frolov <[email protected]>
Lint: Lint 🤖 <[email protected]>
Commit-Queue: Chad Norvell <[email protected]>
Docs-Not-Needed: Chad Norvell <[email protected]>
  • Loading branch information
chadnorvell authored and CQ Bot Account committed Jan 11, 2025
1 parent 4b35845 commit ebd6ec4
Show file tree
Hide file tree
Showing 3 changed files with 463 additions and 1 deletion.
3 changes: 2 additions & 1 deletion pw_ide/ts/pigweed-vscode/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,8 @@
"glob": "^10.4.5",
"hjson": "^3.2.2",
"js-yaml": "^4.1.0",
"node_modules-path": "^2.0.8"
"node_modules-path": "^2.0.8",
"zod": "^3.24.1"
},
"devDependencies": {
"@types/glob": "^8.1.0",
Expand Down
41 changes: 41 additions & 0 deletions pw_ide/ts/pigweed-vscode/src/clangd/parser.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// Copyright 2024 The Pigweed Authors
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.

import { inferTarget, inferTargetPositions } from './parser';

test('inferTargetPositions', () => {
const testCases: [string, number[]][] = [
['?', [0]],
['*/?', [1]],
['*/*/?', [2]],
['*/?/?', [1, 2]],
];

for (const [glob, positions] of testCases) {
expect(inferTargetPositions(glob)).toEqual(positions);
}
});

test('inferTarget', () => {
const testCases: [string, string, string][] = [
['?', 'target/thing.o', 'target'],
['*/?', 'variants/target/foo/bar/thing.o', 'target'],
['*/*/*/*/?', 'foo/bar/baz/hi/target/obj/thing.o', 'target'],
['*/?/?', 'variants/target/foo/bar/thing.o', 'target_foo'],
];

for (const [glob, path, name] of testCases) {
expect(inferTarget(glob, path)).toEqual(name);
}
});
Loading

0 comments on commit ebd6ec4

Please sign in to comment.