@@ -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