Pārlūkot izejas kodu

add folding provider, update dependencies

Martin Aeschlimann 7 gadi atpakaļ
vecāks
revīzija
3a4ade6b5b
5 mainītis faili ar 105 papildinājumiem un 57 dzēšanām
  1. 54 48
      package-lock.json
  2. 7 7
      package.json
  3. 1 0
      src/jsonMode.ts
  4. 7 2
      src/jsonWorker.ts
  5. 36 0
      src/languageFeatures.ts

+ 54 - 48
package-lock.json

@@ -4,22 +4,28 @@
   "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
+    },
     "jsonc-parser": {
-      "version": "2.0.0-next.1",
-      "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.0.0-next.1.tgz",
-      "integrity": "sha512-7BRgtZ0wPCWOUz8oD1m0qo9KKWq8LF1R6Ko38ofbTG3PLa84ucKLIkC/8PLvjFBInfqRo+ah5aazBLscsLTd2Q==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.0.1.tgz",
+      "integrity": "sha512-9w/QyN9qF1dTlffzkmyITa6qAYt6sDArlVZqaP+CXnRh66V73wImQGG8GIBkuas0XLAxddWEWYQ8PPFoK5KNQA==",
       "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": {
@@ -28,7 +34,15 @@
       "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
+        }
       }
     },
     "requirejs": {
@@ -37,64 +51,56 @@
       "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-json-languageservice": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-3.1.0.tgz",
-      "integrity": "sha512-ybmyI9sn3nGJS8LgLR+YPk6M0LH8A7hp14ZGYDeNgrNVqkbZRN6K+JthHkhCR0MmA0RluwDtOJlAeqRFUEiK2A==",
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-3.1.4.tgz",
+      "integrity": "sha512-RiLEhif0MzwIscoxKZ0lL1fvKUbB1DLJcPXGCm/K9WouLbEQu1OuIBsMPp3NnK+ZOW7uMXZgGfpMtWow7YgOiQ==",
       "dev": true,
       "requires": {
-        "jsonc-parser": "2.0.0-next.1",
-        "vscode-languageserver-types": "3.6.1",
-        "vscode-nls": "3.2.2",
-        "vscode-uri": "1.0.3"
+        "jsonc-parser": "^2.0.1",
+        "vscode-languageserver-types": "^3.10.0",
+        "vscode-nls": "^3.2.4",
+        "vscode-uri": "^1.0.5"
       }
     },
     "vscode-languageserver-types": {
-      "version": "3.6.1",
-      "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.6.1.tgz",
-      "integrity": "sha512-Npi3i8gUWcx5h8z5idNqPKBLJmZothXK2FSG4csEmxAR7avb8W6l9Ny+VW9yCUB3bOdD7iXfah8IO0AS1jwQmQ==",
+      "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
     }
   }

+ 7 - 7
package.json

@@ -19,14 +19,14 @@
     "url": "https://github.com/Microsoft/monaco-json/issues"
   },
   "devDependencies": {
-    "jsonc-parser": "2.0.0-next.1",
-    "monaco-editor-core": "0.12.0",
-    "monaco-languages": "1.0.0",
+    "jsonc-parser": "^2.0.1",
+    "monaco-editor-core": "0.13.2",
+    "monaco-languages": "1.3.1",
     "monaco-plugin-helpers": "^1.0.2",
     "requirejs": "^2.3.5",
-    "typescript": "2.7.2",
-    "uglify-js": "^3.3.14",
-    "vscode-json-languageservice": "3.1.0",
-    "vscode-languageserver-types": "3.6.1"
+    "typescript": "3.0.1",
+    "uglify-js": "^3.4.6",
+    "vscode-json-languageservice": "3.1.4",
+    "vscode-languageserver-types": "3.10.0"
   }
 }

+ 1 - 0
src/jsonMode.ts

@@ -36,6 +36,7 @@ export function setupMode(defaults: LanguageServiceDefaultsImpl): void {
 	disposables.push(monaco.languages.setTokensProvider(languageId, createTokenizationSupport(true)));
 	disposables.push(monaco.languages.setLanguageConfiguration(languageId, richEditConfiguration));
 	disposables.push(monaco.languages.registerColorProvider(languageId, new languageFeatures.DocumentColorAdapter(worker)));
+	disposables.push(monaco.languages.registerFoldingRangeProvider(languageId, new languageFeatures.FoldingRangeAdapter(worker)));
 }
 
 

+ 7 - 2
src/jsonWorker.ts

@@ -88,18 +88,23 @@ export class JSONWorker {
 		let symbols = this._languageService.findDocumentSymbols(document, jsonDocument);
 		return Promise.as(symbols);
 	}
-	findDocumentColors(uri: string): Thenable<jsonService.ColorInformation[]> {
+	findDocumentColors(uri: string): Thenable<ls.ColorInformation[]> {
 		let document = this._getTextDocument(uri);
 		let stylesheet = this._languageService.parseJSONDocument(document);
 		let colorSymbols = this._languageService.findDocumentColors(document, stylesheet);
 		return Promise.as(colorSymbols);
 	}
-	getColorPresentations(uri: string, color: jsonService.Color, range: ls.Range): Thenable<jsonService.ColorPresentation[]> {
+	getColorPresentations(uri: string, color: ls.Color, range: ls.Range): Thenable<ls.ColorPresentation[]> {
 		let document = this._getTextDocument(uri);
 		let stylesheet = this._languageService.parseJSONDocument(document);
 		let colorPresentations = this._languageService.getColorPresentations(document, stylesheet, color, range);
 		return Promise.as(colorPresentations);
 	}
+	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) {

+ 36 - 0
src/languageFeatures.ts

@@ -528,6 +528,42 @@ export class DocumentColorAdapter implements monaco.languages.DocumentColorProvi
 	}
 }
 
+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
  */