[css/json/html] update lsp, services & dependencies

This commit is contained in:
Martin Aeschlimann
2019-06-13 10:27:39 +02:00
parent 51e5a1985d
commit a84c30184c
19 changed files with 938 additions and 250 deletions

View File

@@ -7,7 +7,7 @@ import {
createConnection, IConnection, TextDocuments, InitializeParams, InitializeResult, RequestType,
DocumentRangeFormattingRequest, Disposable, DocumentSelector, TextDocumentPositionParams, ServerCapabilities,
Position, ConfigurationRequest, ConfigurationParams, DidChangeWorkspaceFoldersNotification,
WorkspaceFolder, DocumentColorRequest, ColorInformation, ColorPresentationRequest
WorkspaceFolder, DocumentColorRequest, ColorInformation, ColorPresentationRequest, TextDocumentSyncKind
} from 'vscode-languageserver';
import { TextDocument, Diagnostic, DocumentLink, SymbolInformation } from 'vscode-languageserver-types';
import { getLanguageModes, LanguageModes, Settings } from './modes/languageModes';
@@ -15,7 +15,7 @@ import { getLanguageModes, LanguageModes, Settings } from './modes/languageModes
import { format } from './modes/formatting';
import { pushAll } from './utils/arrays';
import { getDocumentContext } from './utils/documentContext';
import uri from 'vscode-uri';
import { URI } from 'vscode-uri';
import { formatError, runSafe, runSafeAsync } from './utils/runner';
import { getFoldingRanges } from './modes/htmlFolding';
@@ -38,9 +38,8 @@ process.on('uncaughtException', (e: any) => {
console.error(formatError(`Unhandled exception`, e));
});
// Create a simple text document manager. The text document manager
// supports full document sync only
const documents: TextDocuments = new TextDocuments();
// Create a text document manager.
const documents: TextDocuments = new TextDocuments(TextDocumentSyncKind.Incremental);
// Make the text document manager listen on the connection
// for open, change and close text document events
documents.listen(connection);
@@ -85,7 +84,7 @@ connection.onInitialize((params: InitializeParams): InitializeResult => {
if (!Array.isArray(workspaceFolders)) {
workspaceFolders = [];
if (params.rootPath) {
workspaceFolders.push({ name: '', uri: uri.file(params.rootPath).toString() });
workspaceFolders.push({ name: '', uri: URI.file(params.rootPath).toString() });
}
}

View File

@@ -15,7 +15,7 @@ export function getHTMLMode(htmlLanguageService: HTMLLanguageService, workspace:
getId() {
return 'html';
},
getSelectionRanges(document: TextDocument, positions: Position[]): SelectionRange[][] {
getSelectionRanges(document: TextDocument, positions: Position[]): SelectionRange[] {
return htmlLanguageService.getSelectionRanges(document, positions);
},
doComplete(document: TextDocument, position: Position, settings = workspace.settings) {

View File

@@ -31,7 +31,7 @@ export interface Workspace {
export interface LanguageMode {
getId(): string;
getSelectionRanges?: (document: TextDocument, positions: Position[]) => SelectionRange[][];
getSelectionRanges?: (document: TextDocument, positions: Position[]) => SelectionRange[];
doValidation?: (document: TextDocument, settings?: Settings) => Diagnostic[];
doComplete?: (document: TextDocument, position: Position, settings?: Settings) => CompletionList;
doResolve?: (document: TextDocument, item: CompletionItem) => CompletionItem;

View File

@@ -7,7 +7,7 @@ import { TextDocument, CompletionItemKind, CompletionItem, TextEdit, Range, Posi
import { WorkspaceFolder } from 'vscode-languageserver';
import * as path from 'path';
import * as fs from 'fs';
import URI from 'vscode-uri';
import { URI } from 'vscode-uri';
import { ICompletionParticipant } from 'vscode-html-languageservice';
import { startsWith } from '../utils/strings';
import { contains } from '../utils/arrays';

View File

@@ -5,7 +5,7 @@
import 'mocha';
import * as assert from 'assert';
import * as path from 'path';
import Uri from 'vscode-uri';
import { URI } from 'vscode-uri';
import { TextDocument, CompletionList, CompletionItemKind } from 'vscode-languageserver-types';
import { getLanguageModes } from '../modes/languageModes';
import { WorkspaceFolder } from 'vscode-languageserver';
@@ -58,8 +58,8 @@ export function testCompletionFor(value: string, expected: { count?: number, ite
let document = TextDocument.create(uri, 'html', 0, value);
let position = document.positionAt(offset);
var languageModes = getLanguageModes({ css: true, javascript: true }, workspace);
var mode = languageModes.getModeAtPosition(document, position)!;
const languageModes = getLanguageModes({ css: true, javascript: true }, workspace);
const mode = languageModes.getModeAtPosition(document, position)!;
let list = mode.doComplete!(document, position);
@@ -95,9 +95,9 @@ suite('HTML Path Completion', () => {
};
const fixtureRoot = path.resolve(__dirname, '../../src/test/pathCompletionFixtures');
const fixtureWorkspace = { name: 'fixture', uri: Uri.file(fixtureRoot).toString() };
const indexHtmlUri = Uri.file(path.resolve(fixtureRoot, 'index.html')).toString();
const aboutHtmlUri = Uri.file(path.resolve(fixtureRoot, 'about/about.html')).toString();
const fixtureWorkspace = { name: 'fixture', uri: URI.file(fixtureRoot).toString() };
const indexHtmlUri = URI.file(path.resolve(fixtureRoot, 'index.html')).toString();
const aboutHtmlUri = URI.file(path.resolve(fixtureRoot, 'about/about.html')).toString();
test('Basics - Correct label/kind/result/command', () => {
testCompletionFor('<script src="./|">', {