Skip to content

Commit a1db36a

Browse files
committed
Improve repo definition performance
1 parent ea45461 commit a1db36a

File tree

1 file changed

+19
-13
lines changed

1 file changed

+19
-13
lines changed

src/Providers/DefinitionProvider.ts

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -148,24 +148,30 @@ export const DefinitionProvider: vscode.DefinitionProvider = {
148148
if (!node.childForFieldName('sharp')) {
149149
break;
150150
}
151-
queryString = `;scm
151+
const nestedRepoQuery = `;scm
152152
(repo
153153
[(patterns) (include)] (repository
154154
(repo
155-
(key) @repo (.eq? @repo "${ruleName}")))
155+
(key) @repo))
156156
!match !begin)
157157
`;
158-
// const start = performance.now();
159-
const nestedRepoNode = queryNode(tree.rootNode, queryString, point, false)?.node;
158+
const nestedRepoCaptures = queryNode(tree.rootNode, nestedRepoQuery, point, point);
160159
// vscode.window.showInformationMessage(`mid ${(performance.now() - start).toFixed(3)}ms\n${JSON.stringify(definitions)}`);
161-
if (nestedRepoNode) {
162-
const locationLink: vscode.DefinitionLink = {
163-
originSelectionRange: originSelectionRange, // Underlined text
164-
targetUri: document.uri,
165-
targetRange: toRange(nestedRepoNode.parent!), // Hover text
166-
targetSelectionRange: toRange(nestedRepoNode), // Highlighted text
167-
};
168-
definitions.push(locationLink);
160+
nestedRepoCaptures.reverse();
161+
let exit = false;
162+
for (const nestedRepoCapture of nestedRepoCaptures) {
163+
const nestedRepoNode = nestedRepoCapture.node;
164+
if (nestedRepoNode.text == ruleName) {
165+
exit = pushDefinitionLink(
166+
definitions,
167+
nestedRepoNode.parent,
168+
toRange(nestedRepoNode),
169+
uri,
170+
);
171+
break;
172+
}
173+
}
174+
if (exit) {
169175
break;
170176
}
171177

@@ -373,7 +379,7 @@ export const DefinitionProvider: vscode.DefinitionProvider = {
373379
}
374380
};
375381

376-
function pushDefinitionLink(definitions: vscode.LocationLink[], node: SyntaxNode | undefined, originSelectionRange: vscode.Range, uri: vscode.Uri) {
382+
function pushDefinitionLink(definitions: vscode.LocationLink[], node: SyntaxNode | null | undefined, originSelectionRange: vscode.Range, uri: vscode.Uri) {
377383
if (!node) {
378384
return false;
379385
}

0 commit comments

Comments
 (0)