Allow syntax tree to update when changing files

Previously when using the file based syntax tree, it would not update until a
change had been made in the new file. Now we automatically update the syntax
tree to match the current file.
This commit is contained in:
Ville Penttinen 2019-03-03 22:03:37 +02:00
parent 1b4e0ec1c8
commit 0db95fc812
2 changed files with 26 additions and 17 deletions

View file

@ -1,17 +1,25 @@
import { TextEditor } from 'vscode'; import { TextEditor } from 'vscode';
import { TextDocumentIdentifier } from 'vscode-languageclient'; import { TextDocumentIdentifier } from 'vscode-languageclient';
import {
SyntaxTreeContentProvider,
syntaxTreeUri
} from '../commands/syntaxTree';
import { Decoration } from '../highlighting'; import { Decoration } from '../highlighting';
import { Server } from '../server'; import { Server } from '../server';
export async function handle(editor: TextEditor | undefined) { export function makeHandler(syntaxTreeProvider: SyntaxTreeContentProvider) {
if ( return async function handle(editor: TextEditor | undefined) {
!Server.config.highlightingOn || if (!editor || editor.document.languageId !== 'rust') {
!editor ||
editor.document.languageId !== 'rust'
) {
return; return;
} }
syntaxTreeProvider.eventEmitter.fire(syntaxTreeUri);
if (!Server.config.highlightingOn) {
return;
}
const params: TextDocumentIdentifier = { const params: TextDocumentIdentifier = {
uri: editor.document.uri.toString() uri: editor.document.uri.toString()
}; };
@ -20,4 +28,5 @@ export async function handle(editor: TextEditor | undefined) {
params params
); );
Server.highlighter.setHighlights(editor, decorations); Server.highlighter.setHighlights(editor, decorations);
};
} }

View file

@ -94,13 +94,13 @@ export function activate(context: vscode.ExtensionContext) {
notifications.publishDecorations.handle notifications.publishDecorations.handle
] ]
]; ];
const syntaxTreeContentProvider = new SyntaxTreeContentProvider();
// The events below are plain old javascript events, triggered and handled by vscode // The events below are plain old javascript events, triggered and handled by vscode
vscode.window.onDidChangeActiveTextEditor( vscode.window.onDidChangeActiveTextEditor(
events.changeActiveTextEditor.handle events.changeActiveTextEditor.makeHandler(syntaxTreeContentProvider)
); );
const syntaxTreeContentProvider = new SyntaxTreeContentProvider();
disposeOnDeactivation( disposeOnDeactivation(
vscode.workspace.registerTextDocumentContentProvider( vscode.workspace.registerTextDocumentContentProvider(
'rust-analyzer', 'rust-analyzer',