mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-29 13:03:42 +01:00
[html] htmlDocument cache
This commit is contained in:
@@ -4,12 +4,11 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
'use strict';
|
||||
|
||||
import {
|
||||
createConnection, IConnection,
|
||||
TextDocuments, TextDocument, InitializeParams, InitializeResult
|
||||
} from 'vscode-languageserver';
|
||||
import {createConnection, IConnection, TextDocuments, InitializeParams, InitializeResult} from 'vscode-languageserver';
|
||||
|
||||
import {HTMLDocument, getLanguageService, CompletionConfiguration, HTMLFormatConfiguration} from 'vscode-html-languageservice';
|
||||
import {getLanguageModelCache} from './languageModelCache';
|
||||
|
||||
|
||||
import * as nls from 'vscode-nls';
|
||||
nls.config(process.env['VSCODE_NLS_CONFIG']);
|
||||
@@ -27,6 +26,14 @@ let documents: TextDocuments = new TextDocuments();
|
||||
// for open, change and close text document events
|
||||
documents.listen(connection);
|
||||
|
||||
let htmlDocuments = getLanguageModelCache<HTMLDocument>(10, 60, document => getLanguageService().parseHTMLDocument(document));
|
||||
documents.onDidClose(e => {
|
||||
htmlDocuments.onDocumentRemoved(e.document);
|
||||
});
|
||||
connection.onShutdown(() => {
|
||||
htmlDocuments.dispose();
|
||||
});
|
||||
|
||||
let workspacePath: string;
|
||||
|
||||
// After the server has started the client sends an initilize request. The server receives
|
||||
@@ -67,20 +74,16 @@ connection.onDidChangeConfiguration((change) => {
|
||||
languageSettings = settings.html;
|
||||
});
|
||||
|
||||
function getHTMLDocument(document: TextDocument): HTMLDocument {
|
||||
return languageService.parseHTMLDocument(document);
|
||||
}
|
||||
|
||||
connection.onCompletion(textDocumentPosition => {
|
||||
let document = documents.get(textDocumentPosition.textDocument.uri);
|
||||
let htmlDocument = getHTMLDocument(document);
|
||||
let htmlDocument = htmlDocuments.get(document);
|
||||
let options = languageSettings && languageSettings.suggest;
|
||||
return languageService.doComplete(document, textDocumentPosition.position, htmlDocument, options);
|
||||
});
|
||||
|
||||
connection.onDocumentHighlight(documentHighlightParams => {
|
||||
let document = documents.get(documentHighlightParams.textDocument.uri);
|
||||
let htmlDocument = getHTMLDocument(document);
|
||||
let htmlDocument = htmlDocuments.get(document);
|
||||
return languageService.findDocumentHighlights(document, documentHighlightParams.position, htmlDocument);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user