@@ -4,11 +4,12 @@ import { getTrees, queryNode, toPoint, toRange, trueParent } from "../TreeSitter
44export const DocumentHighlightProvider : vscode . DocumentHighlightProvider = {
55 provideDocumentHighlights ( document : vscode . TextDocument , position : vscode . Position , token : vscode . CancellationToken ) : vscode . DocumentHighlight [ ] {
66 // vscode.window.showInformationMessage(JSON.stringify("DocumentHighlights"));
7+ // const start = performance.now();
78 const trees = getTrees ( document ) ;
89 const jsonTree = trees . jsonTree ;
910 const point = toPoint ( position ) ;
1011
11- const cursorQuery = `
12+ const cursorQuery = `;scm
1213 (key) @key
1314 (value !scopeName !ruleName !self !base) @value
1415 (capture . (key) @key)
@@ -32,24 +33,33 @@ export const DocumentHighlightProvider: vscode.DocumentHighlightProvider = {
3233 // const cursorRange = toRange(cursorNode);
3334
3435
35- // const scopeName = cursorNode.parent.childForFieldName('scopeName')?.text;
36+ // const scopeName = cursorNode.parent.childForFieldName('scopeName')?.text;
3637 const rootScopeName = queryNode ( jsonTree . rootNode , `(json (scopeName (value) @scopeName))` ) . pop ( ) ?. node ?. text ;
3738
3839
3940 let query = `` ;
4041 switch ( cursorName ) {
4142 case 'key' :
4243 const cursorType = trueParent ( cursorNode ) . type ;
43- // const cursorType = cursorText ? cursorNode.parent.type : cursorNode.parent.parent.type;
44- query = `(${ cursorType } . (key) @key (#eq? @key "${ cursorText } "))` ;
44+ if ( cursorType != 'repo' ) {
45+ query = `(${ cursorType } . (key) @key (#eq? @key "${ cursorText } "))` ;
46+ break ;
47+ }
48+ // FallThrough
49+ case 'repo' :
50+ query = `;scm
51+ (repo (key) @repo (#eq? @repo "${ cursorText } "))
52+ (include
53+ (value
54+ (scopeName)? @_scopeName (#eq? @_scopeName "${ rootScopeName } ")
55+ (ruleName) @_ruleName (#eq? @_ruleName "${ cursorText } ")
56+ ) @include
57+ )
58+ ` ;
4559 break ;
4660 case 'value' :
4761 query = `(_ (value) @value (#eq? @value "${ cursorText } "))` ;
4862 break ;
49- case 'repo' :
50- query = `(repo (key) @repo (#eq? @repo "${ cursorText } "))` ;
51- query += `(include (value (scopeName)? @_scopeName (#eq? @_scopeName "${ rootScopeName } ") (ruleName) @_ruleName (#eq? @_ruleName "${ cursorText } ")) @include)` ;
52- break ;
5363 case 'self' :
5464 case 'rootScopeName' :
5565 query = `(json (scopeName (value) @scopeName))` ;
@@ -99,6 +109,7 @@ export const DocumentHighlightProvider: vscode.DocumentHighlightProvider = {
99109 }
100110
101111 // vscode.window.showInformationMessage(JSON.stringify(documentHighlights));
112+ // vscode.window.showInformationMessage(`documentHighlights ${performance.now() - start}ms`);
102113 return documentHighlights ;
103114 }
104115} ;
0 commit comments