Skip to content

Commit

Permalink
add query syntax
Browse files Browse the repository at this point in the history
  • Loading branch information
Chanyon committed Sep 21, 2023
1 parent 0d614f1 commit 7f951d9
Show file tree
Hide file tree
Showing 5 changed files with 233 additions and 192 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "vscode-nature",
"displayName": "vscode-nature",
"description": "nature language support (syntax highlighting, formatter, snippets) for Visual Studio Code",
"icon": "./icon.png",
"icon": "icon.png",
"version": "0.1.0",
"license": "MIT",
"engines": {
Expand Down
11 changes: 8 additions & 3 deletions src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,23 @@ export function activate(context: vscode.ExtensionContext) {
"number",
"keyword",
"parameter",
"variable",
"method",
"namespace",
"punctuation",
"macro"
];
const modifiers = ["definition", "deprecated", "documentation"];
const modifiers = ["definition","declaration", "deprecated", "punctuation", "documentation"];

const selector: vscode.DocumentSelector = {
language: "proto",
language: "nature",
scheme: "file"
};

const legend = new vscode.SemanticTokensLegend(tokenTypes, modifiers);
const provider = new SematicTokensProvider(legend);

console.log("--------------------", provider);
// console.log("--------------------", provider);
context.subscriptions.push(
vscode.languages.registerDocumentSemanticTokensProvider(
selector,
Expand Down
78 changes: 54 additions & 24 deletions src/providers/sematicTokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@ import * as Parser from "web-tree-sitter";
export default class SematicTokensProvider implements vscode.DocumentSemanticTokensProvider {
parser: Parser | undefined;
constructor(public legend: vscode.SemanticTokensLegend) {
// console.log("path---------",path.resolve(__dirname, "../../tree-sitter-nature.wasm"))
Parser.init().then(() => {
Parser.Language.load(
path.resolve(__dirname, "../../tree-sitter-nature.wasm")
path.resolve(__dirname, "../tree-sitter-nature.wasm")
).then(lang => {
this.parser = new Parser();
this.parser.setLanguage(lang);
Expand All @@ -19,31 +20,60 @@ export default class SematicTokensProvider implements vscode.DocumentSemanticTok

provideDocumentSemanticTokens(document: vscode.TextDocument, token: vscode.CancellationToken): vscode.ProviderResult<vscode.SemanticTokens> {
const tree = this.parser?.parse(document.getText());
// (["fn" "for"] @keyword)
const query = this.parser?.getLanguage()
.query("('message') @keyword");

const captures = query?.captures(tree!.rootNode);
console.log(captures);

const tokenBuilder = new vscode.SemanticTokensBuilder(this.legend);
.query(`
[
(callExpr
(identifier) @function)
if (captures) {
for (const capture of captures) {
const range = new vscode.Range(
new vscode.Position(
capture.node.startPosition.row,
capture.node.startPosition.column,
),
new vscode.Position(
capture.node.endPosition.row,
capture.node.endPosition.column,
),
);
tokenBuilder.push(
range,
capture.name
);
}
(funDecl
(identifier) @function)
(typeDecl
(identifier) @type)
(typeDecl
(identifier) @type
(unionType [
(baseType)
(baseType
(identifier) @type)
]))
(parameterList
(parameterDecl
type: (type
(baseType) @type)
name: (identifier) @string))
]
`);
// console.log("query----------------",query);

const captures = query?.captures(tree!.rootNode);
// console.log("captures----------------",captures);

const tokenBuilder = new vscode.SemanticTokensBuilder(this.legend);

if (captures) {
for (const capture of captures) {
const range = new vscode.Range(
new vscode.Position(
capture.node.startPosition.row,
capture.node.startPosition.column,
),
new vscode.Position(
capture.node.endPosition.row,
capture.node.endPosition.column,
),
);

// console.log(`capture val---------${capture.name}`);
tokenBuilder.push(
range,
capture.name
);
}
}
const tokens = tokenBuilder.build();
return Promise.resolve(tokens);
Expand Down
Loading

0 comments on commit 7f951d9

Please sign in to comment.