add folding support, update dependendencies

pull/2748/head
Martin Aeschlimann 7 years ago
parent e0cad2423f
commit 8d740b7665

100
package-lock.json generated

@ -4,16 +4,22 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"commander": {
"version": "2.16.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz",
"integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==",
"dev": true
},
"monaco-editor-core": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.12.0.tgz",
"integrity": "sha512-wOoEVAoZtrarDRcQC32Fp0ocacpQd6/Nb0FmUZOHeD3swZuPZhDLOxTyoNLjKq3d+h/6g+IARBLnDaLT5OQD4g==",
"version": "0.13.2",
"resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.13.2.tgz",
"integrity": "sha512-UwUpmT+37fryykVcfuG/KA3sUV/Siip2V+kzzH/F6gzi6QGAe/A/qvr5sfTALdoW55V5aVpUNctPFUw5Bm1Qeg==",
"dev": true
},
"monaco-languages": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/monaco-languages/-/monaco-languages-1.0.0.tgz",
"integrity": "sha512-OKwVZJejt07Wpyy60vptcPueIZRBFOiJT8gfp60O861Pu0HHxhLfNBqeJ5zJ9x4PIbhd5Fq7+tSU+NbnOAfEcA==",
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/monaco-languages/-/monaco-languages-1.3.1.tgz",
"integrity": "sha512-zOrUBPBUW7RenUoQocl/O5wPlPVR5Ekb4GstgeCxD8PXM5qfU2djdIgAbxIVIPgoGemrQrKKfPV093T0Ot7n4Q==",
"dev": true
},
"monaco-plugin-helpers": {
@ -22,13 +28,21 @@
"integrity": "sha512-7kUx8dtd5qVNVgUARBRhnM8oftPglYwlINfigC4yGUiuzqtIN22u1tly8umiOCIPR0eFiBLjt6aN23oZh2QJgg==",
"dev": true,
"requires": {
"typescript": "2.7.2"
"typescript": "^2.7.2"
},
"dependencies": {
"typescript": {
"version": "2.9.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",
"integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==",
"dev": true
}
}
},
"monaco-typescript": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/monaco-typescript/-/monaco-typescript-3.0.0.tgz",
"integrity": "sha512-eqxb5wG/HtL+Y/Taedh4RzxyaXDJc2YXOizgpr4X+KRHhg+mKOkcJ5QglHs/yQrVisY1CKsF/A66hTnVOaxDbg==",
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/monaco-typescript/-/monaco-typescript-3.1.0.tgz",
"integrity": "sha512-GQWDKoXVrh4r0TpjJuRTpGEDeyN0/bqel4Op08CV0bpFL4xifFDfLPAyGeDPJiSlapaY5i+shC6VK0JELfE1OQ==",
"dev": true
},
"requirejs": {
@ -37,63 +51,55 @@
"integrity": "sha512-svnO+aNcR/an9Dpi44C7KSAy5fFGLtmPbaaCeQaklUz8BQhS64tWWIIlvEA5jrWICzlO/X9KSzSeXFnZdBu8nw==",
"dev": true
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
},
"typescript": {
"version": "2.7.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-2.7.2.tgz",
"integrity": "sha512-p5TCYZDAO0m4G344hD+wx/LATebLWZNkkh2asWUFqSsD2OrDNhbAHuSjobrmsUmdzjJjEeZVU9g1h3O6vpstnw==",
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.0.1.tgz",
"integrity": "sha512-zQIMOmC+372pC/CCVLqnQ0zSBiY7HHodU7mpQdjiZddek4GMj31I3dUJ7gAs9o65X7mnRma6OokOkc6f9jjfBg==",
"dev": true
},
"uglify-js": {
"version": "3.3.14",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.14.tgz",
"integrity": "sha512-OY8VPQU25q09gQRbC+Ekk3xgEVBmYFEfVcgS47ksjTiNht2LmLlUkWutyi38ZsDSToJHwbe76kDGwmD226Z2Fg==",
"version": "3.4.6",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.6.tgz",
"integrity": "sha512-O1D7L6WcOzS1qW2ehopEm4cWm5yA6bQBozlks8jO8ODxYCy4zv+bR/la4Lwp01tpkYGNonnpXvUpYtrvSu8Yzg==",
"dev": true,
"requires": {
"commander": "2.14.1",
"source-map": "0.6.1"
},
"dependencies": {
"commander": {
"version": "2.14.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz",
"integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==",
"dev": true
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
}
"commander": "~2.16.0",
"source-map": "~0.6.1"
}
},
"vscode-html-languageservice": {
"version": "2.1.3-next.5",
"resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-2.1.3-next.5.tgz",
"integrity": "sha512-1xAdHIUY5LsfnRm0Slks7QX168MHmjBCxr0RlResVDFcDmsuYQ9WUHlyTk4JPF/wTONCCk9/KL3jfDqBNEXrxQ==",
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-2.1.4.tgz",
"integrity": "sha512-3SMcTOaiqFTCiHOeAFbHcBSsAgJA81q9PrRdOR7b5LQhkGDUwL5FEETp9gzd+A4c1Bxe14Zu51bY7+jwfTnfzA==",
"dev": true,
"requires": {
"vscode-languageserver-types": "3.7.2",
"vscode-nls": "3.2.2",
"vscode-uri": "1.0.3"
"vscode-languageserver-types": "^3.10.0",
"vscode-nls": "^3.2.4",
"vscode-uri": "^1.0.5"
}
},
"vscode-languageserver-types": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.7.2.tgz",
"integrity": "sha512-L9D2RA+PDS2CiyhLQY5ZrOmyRvXyjc4Ha8s9PqS6mIgGxj00R5Xx2vLKBnAOVfrawJXYZST+2hioMks6SQVU7A==",
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.10.0.tgz",
"integrity": "sha512-vxmCsVZGwq8X40SuLP8Ix7V0rq5V/7iQUjRVe2Oxm+TbmjxtjK4dpHHXQCUawjA4fhPA9FwjSRbDhbvQmYCfMw==",
"dev": true
},
"vscode-nls": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-3.2.2.tgz",
"integrity": "sha512-/Ur1+tgazwd51+ncRyoy0UIu4dvMdVXS9XMUULQlZIBoNGEwOhwEx9x+hHWoUjldMrOQ32t2CGKo0u6D4R6/hg==",
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-3.2.4.tgz",
"integrity": "sha512-FTjdqa4jDDoBjJqr36O8lmmZf/55kQ2w4ZY/+GL6K92fq765BqO3aYw21atnXUno/P04V5DWagNl4ybDIndJsw==",
"dev": true
},
"vscode-uri": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
"integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.5.tgz",
"integrity": "sha1-O4majvccN/MFTXm9vdoxx7828g0=",
"dev": true
}
}

@ -19,15 +19,14 @@
"url": "https://github.com/Microsoft/monaco-editor/issues"
},
"devDependencies": {
"monaco-editor-core": "0.12.0",
"monaco-languages": "^1.0.0",
"monaco-editor-core": "0.13.2",
"monaco-languages": "^1.3.1",
"monaco-plugin-helpers": "^1.0.2",
"monaco-typescript": "^3.0.0",
"monaco-typescript": "^3.1.0",
"requirejs": "^2.3.5",
"typescript": "2.7.2",
"uglify-js": "^3.3.14",
"vscode-html-languageservice": "2.1.3-next.5",
"vscode-languageserver-types": "^3.7.2",
"vscode-nls": "^3.2.2"
"typescript": "^3.0.1",
"uglify-js": "^3.4.6",
"vscode-html-languageservice": "^2.1.4",
"vscode-languageserver-types": "^3.10.0"
}
}

@ -4,9 +4,9 @@
*--------------------------------------------------------------------------------------------*/
'use strict';
import {WorkerManager} from './workerManager';
import {HTMLWorker} from './htmlWorker';
import {LanguageServiceDefaultsImpl} from './monaco.contribution';
import { WorkerManager } from './workerManager';
import { HTMLWorker } from './htmlWorker';
import { LanguageServiceDefaultsImpl } from './monaco.contribution';
import * as languageFeatures from './languageFeatures';
import Promise = monaco.Promise;
@ -26,6 +26,7 @@ export function setupMode(defaults: LanguageServiceDefaultsImpl): void {
monaco.languages.registerCompletionItemProvider(languageId, new languageFeatures.CompletionAdapter(worker));
monaco.languages.registerDocumentHighlightProvider(languageId, new languageFeatures.DocumentHighlightAdapter(worker));
monaco.languages.registerLinkProvider(languageId, new languageFeatures.DocumentLinkAdapter(worker));
monaco.languages.registerFoldingRangeProvider(languageId, new languageFeatures.FoldingRangeAdapter(worker));
// only html
if (languageId === 'html') {

@ -15,12 +15,12 @@ import * as ls from 'vscode-languageserver-types';
export class HTMLWorker {
private _ctx:IWorkerContext;
private _ctx: IWorkerContext;
private _languageService: htmlService.LanguageService;
private _languageSettings: monaco.languages.html.Options;
private _languageId: string;
constructor(ctx:IWorkerContext, createData: ICreateData) {
constructor(ctx: IWorkerContext, createData: ICreateData) {
this._ctx = ctx;
this._languageSettings = createData.languageSettings;
this._languageId = createData.languageId;
@ -52,6 +52,11 @@ export class HTMLWorker {
let links = this._languageService.findDocumentLinks(document, null);
return Promise.as(links);
}
provideFoldingRanges(uri: string, context?: { rangeLimit?: number; }): Thenable<ls.FoldingRange[]> {
let document = this._getTextDocument(uri);
let ranges = this._languageService.getFoldingRanges(document, context);
return Promise.as(ranges);
}
private _getTextDocument(uri: string): ls.TextDocument {
let models = this._ctx.getMirrorModels();
for (let model of models) {
@ -68,6 +73,6 @@ export interface ICreateData {
languageSettings: monaco.languages.html.Options;
}
export function create(ctx:IWorkerContext, createData: ICreateData): HTMLWorker {
export function create(ctx: IWorkerContext, createData: ICreateData): HTMLWorker {
return new HTMLWorker(ctx, createData);
}

@ -4,8 +4,8 @@
*--------------------------------------------------------------------------------------------*/
'use strict';
import {LanguageServiceDefaultsImpl} from './monaco.contribution';
import {HTMLWorker} from './htmlWorker';
import { LanguageServiceDefaultsImpl } from './monaco.contribution';
import { HTMLWorker } from './htmlWorker';
import * as ls from 'vscode-languageserver-types';
@ -48,11 +48,11 @@ export class DiagnosticsAdapter {
const onModelRemoved = (model: monaco.editor.IModel): void => {
monaco.editor.setModelMarkers(model, this._languageId, []);
let uriStr = model.uri.toString();
let listener = this._listener[uriStr];
if (listener) {
listener.dispose();
delete this._listener[uriStr];
}
let listener = this._listener[uriStr];
if (listener) {
listener.dispose();
delete this._listener[uriStr];
}
};
this._disposables.push(monaco.editor.onDidCreateModel(onModelAdd));
@ -239,7 +239,7 @@ function fromMarkdownString(entry: string | monaco.IMarkdownString): ls.MarkupCo
}
function fromCompletionItem(entry: DataCompletionItem): ls.CompletionItem {
let item : ls.CompletionItem = {
let item: ls.CompletionItem = {
label: entry.label,
sortText: entry.sortText,
filterText: entry.filterText,
@ -252,7 +252,7 @@ function fromCompletionItem(entry: DataCompletionItem): ls.CompletionItem {
item.insertText = entry.insertText.value;
item.insertTextFormat = ls.InsertTextFormat.Snippet
} else {
item.insertText = <string> entry.insertText;
item.insertText = <string>entry.insertText;
}
if (entry.range) {
item.textEdit = ls.TextEdit.replace(fromRange(entry.range), item.insertText);
@ -281,7 +281,7 @@ export class CompletionAdapter implements monaco.languages.CompletionItemProvide
return;
}
let items: monaco.languages.CompletionItem[] = info.items.map(entry => {
let item : monaco.languages.CompletionItem = {
let item: monaco.languages.CompletionItem = {
label: entry.label,
insertText: entry.insertText,
sortText: entry.sortText,
@ -295,7 +295,7 @@ export class CompletionAdapter implements monaco.languages.CompletionItemProvide
item.insertText = entry.textEdit.newText;
}
if (entry.insertTextFormat === ls.InsertTextFormat.Snippet) {
item.insertText = { value: <string> item.insertText };
item.insertText = { value: <string>item.insertText };
}
return item;
});
@ -332,54 +332,7 @@ function toMarkdownString(entry: ls.MarkupContent | ls.MarkedString): monaco.IMa
return { value: '```' + entry.language + '\n' + entry.value + '\n```\n' };
}
function toMarkedStringArray(contents: ls.MarkedString | ls.MarkedString[]): monaco.IMarkdownString[] {
if (!contents) {
return void 0;
}
if (Array.isArray(contents)) {
return contents.map(toMarkdownString);
}
return [toMarkdownString(contents)];
}
// --- definition ------
function toLocation(location: ls.Location): monaco.languages.Location {
return {
uri: Uri.parse(location.uri),
range: toRange(location.range)
};
}
// --- document symbols ------
function toSymbolKind(kind: ls.SymbolKind): monaco.languages.SymbolKind {
let mKind = monaco.languages.SymbolKind;
switch (kind) {
case ls.SymbolKind.File: return mKind.Array;
case ls.SymbolKind.Module: return mKind.Module;
case ls.SymbolKind.Namespace: return mKind.Namespace;
case ls.SymbolKind.Package: return mKind.Package;
case ls.SymbolKind.Class: return mKind.Class;
case ls.SymbolKind.Method: return mKind.Method;
case ls.SymbolKind.Property: return mKind.Property;
case ls.SymbolKind.Field: return mKind.Field;
case ls.SymbolKind.Constructor: return mKind.Constructor;
case ls.SymbolKind.Enum: return mKind.Enum;
case ls.SymbolKind.Interface: return mKind.Interface;
case ls.SymbolKind.Function: return mKind.Function;
case ls.SymbolKind.Variable: return mKind.Variable;
case ls.SymbolKind.Constant: return mKind.Constant;
case ls.SymbolKind.String: return mKind.String;
case ls.SymbolKind.Number: return mKind.Number;
case ls.SymbolKind.Boolean: return mKind.Boolean;
case ls.SymbolKind.Array: return mKind.Array;
}
return mKind.Function;
}
function toHighlighKind(kind: ls.DocumentHighlightKind): monaco.languages.DocumentHighlightKind {
let mKind = monaco.languages.DocumentHighlightKind;
@ -437,7 +390,7 @@ export class DocumentLinkAdapter implements monaco.languages.LinkProvider {
function fromFormattingOptions(options: monaco.languages.FormattingOptions): ls.FormattingOptions {
return {
tabSize: options.tabSize,
insertSpaces: options.insertSpaces
insertSpaces: options.insertSpaces
};
}
@ -479,6 +432,42 @@ export class DocumentRangeFormattingEditProvider implements monaco.languages.Doc
}
}
export class FoldingRangeAdapter implements monaco.languages.FoldingRangeProvider {
constructor(private _worker: WorkerAccessor) {
}
public provideFoldingRanges(model: monaco.editor.IReadOnlyModel, context: monaco.languages.FoldingContext, token: CancellationToken): Thenable<monaco.languages.FoldingRange[]> {
const resource = model.uri;
return wireCancellationToken(token, this._worker(resource).then(worker => worker.provideFoldingRanges(resource.toString(), context)).then(ranges => {
if (!ranges) {
return;
}
return ranges.map(range => {
let result: monaco.languages.FoldingRange = {
start: range.startLine,
end: range.endLine
};
if (typeof range.kind !== 'undefined') {
result.kind = toFoldingRangeKind(<ls.FoldingRangeKind>range.kind);
}
return result;
});
}));
}
}
function toFoldingRangeKind(kind: ls.FoldingRangeKind): monaco.languages.FoldingRangeKind {
switch (kind) {
case ls.FoldingRangeKind.Comment: return monaco.languages.FoldingRangeKind.Comment;
case ls.FoldingRangeKind.Imports: return monaco.languages.FoldingRangeKind.Imports;
case ls.FoldingRangeKind.Region: return monaco.languages.FoldingRangeKind.Region;
}
return void 0;
}
/**
* Hook a cancellation token to a WinJS Promise
*/

@ -8,7 +8,6 @@ import * as mode from './htmlMode';
import Emitter = monaco.Emitter;
import IEvent = monaco.IEvent;
import IDisposable = monaco.IDisposable;
// --- HTML configuration and defaults ---------

Loading…
Cancel
Save