diff options
author | veetaha <[email protected]> | 2020-04-02 03:38:52 +0100 |
---|---|---|
committer | veetaha <[email protected]> | 2020-04-02 03:38:52 +0100 |
commit | 62ed01a1078f499c93c70025342dd869bd277d39 (patch) | |
tree | 4da720bcaa718df505816ddc7ca49cddbc3e9822 /editors/code | |
parent | f696df379a5dd450b3d89a8c690de5f8d78f6be2 (diff) |
vscode: add highlighting of syntax tree
Diffstat (limited to 'editors/code')
-rw-r--r-- | editors/code/package.json | 15 | ||||
-rw-r--r-- | editors/code/ra_syntax_tree.tmGrammar.json | 31 | ||||
-rw-r--r-- | editors/code/src/commands/syntax_tree.ts | 5 |
3 files changed, 50 insertions, 1 deletions
diff --git a/editors/code/package.json b/editors/code/package.json index 146b696e9..87999fe22 100644 --- a/editors/code/package.json +++ b/editors/code/package.json | |||
@@ -411,6 +411,21 @@ | |||
411 | ] | 411 | ] |
412 | } | 412 | } |
413 | ], | 413 | ], |
414 | "languages": [ | ||
415 | { | ||
416 | "id": "ra_syntax_tree", | ||
417 | "extensions": [ | ||
418 | ".rast" | ||
419 | ] | ||
420 | } | ||
421 | ], | ||
422 | "grammars": [ | ||
423 | { | ||
424 | "language": "ra_syntax_tree", | ||
425 | "scopeName": "source.ra_syntax_tree", | ||
426 | "path": "ra_syntax_tree.tmGrammar.json" | ||
427 | } | ||
428 | ], | ||
414 | "problemMatchers": [ | 429 | "problemMatchers": [ |
415 | { | 430 | { |
416 | "name": "rustc", | 431 | "name": "rustc", |
diff --git a/editors/code/ra_syntax_tree.tmGrammar.json b/editors/code/ra_syntax_tree.tmGrammar.json new file mode 100644 index 000000000..0d72a3e36 --- /dev/null +++ b/editors/code/ra_syntax_tree.tmGrammar.json | |||
@@ -0,0 +1,31 @@ | |||
1 | { | ||
2 | "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", | ||
3 | |||
4 | "scopeName": "source.ra_syntax_tree", | ||
5 | "patterns": [ | ||
6 | { "include": "#node_type" }, | ||
7 | { "include": "#node_range_index" }, | ||
8 | { "include": "#token_text" } | ||
9 | ], | ||
10 | "repository": { | ||
11 | "node_type": { | ||
12 | "match": "^\\s*([A-Z_]+?)@", | ||
13 | "captures": { | ||
14 | "1": { | ||
15 | "name": "entity.name.class" | ||
16 | } | ||
17 | } | ||
18 | }, | ||
19 | "node_range_index": { | ||
20 | "match": "\\d+", | ||
21 | "name": "constant.numeric" | ||
22 | }, | ||
23 | "token_text": { | ||
24 | "match": "\".+\"", | ||
25 | "name": "string" | ||
26 | } | ||
27 | }, | ||
28 | "fileTypes": [ | ||
29 | "rast" | ||
30 | ] | ||
31 | } | ||
diff --git a/editors/code/src/commands/syntax_tree.ts b/editors/code/src/commands/syntax_tree.ts index 996c7a716..01ab4de74 100644 --- a/editors/code/src/commands/syntax_tree.ts +++ b/editors/code/src/commands/syntax_tree.ts | |||
@@ -15,6 +15,9 @@ export function syntaxTree(ctx: Ctx): Cmd { | |||
15 | void new AstInspector(ctx); | 15 | void new AstInspector(ctx); |
16 | 16 | ||
17 | ctx.pushCleanup(vscode.workspace.registerTextDocumentContentProvider(AST_FILE_SCHEME, tdcp)); | 17 | ctx.pushCleanup(vscode.workspace.registerTextDocumentContentProvider(AST_FILE_SCHEME, tdcp)); |
18 | ctx.pushCleanup(vscode.languages.setLanguageConfiguration("ra_syntax_tree", { | ||
19 | brackets: [["[", ")"]], | ||
20 | })); | ||
18 | 21 | ||
19 | return async () => { | 22 | return async () => { |
20 | const editor = vscode.window.activeTextEditor; | 23 | const editor = vscode.window.activeTextEditor; |
@@ -36,7 +39,7 @@ export function syntaxTree(ctx: Ctx): Cmd { | |||
36 | } | 39 | } |
37 | 40 | ||
38 | class TextDocumentContentProvider implements vscode.TextDocumentContentProvider { | 41 | class TextDocumentContentProvider implements vscode.TextDocumentContentProvider { |
39 | readonly uri = vscode.Uri.parse('rust-analyzer://syntaxtree'); | 42 | readonly uri = vscode.Uri.parse('rust-analyzer://syntaxtree/tree.rast'); |
40 | readonly eventEmitter = new vscode.EventEmitter<vscode.Uri>(); | 43 | readonly eventEmitter = new vscode.EventEmitter<vscode.Uri>(); |
41 | 44 | ||
42 | 45 | ||