Browse Source

Merge remote-tracking branch 'origin/master' into pr/orta/40

Alex Dima 5 years ago
parent
commit
559bc5255a

+ 25 - 0
azure-pipelines.yml

@@ -0,0 +1,25 @@
+# triggered by schedule at 5am to try make sure it's done after the TS daily build
+schedules:
+- cron: '0 5 * * *'
+  displayName: Daily 5am build
+  branches:
+    include:
+    - master
+  always: true
+
+pr: none
+
+pool:
+  vmImage: 'ubuntu-latest'
+
+steps:
+- bash: |
+    npm install
+    npm run run-nightly
+  displayName: 'Update & Build'
+
+- bash: |
+    echo //registry.npmjs.org/:_authToken=${NPM_TOKEN} > .npmrc
+    npm publish --tag next
+
+  displayName: 'Publish to NPM'

+ 6 - 6
package-lock.json

@@ -11,9 +11,9 @@
       "dev": true
       "dev": true
     },
     },
     "monaco-editor-core": {
     "monaco-editor-core": {
-      "version": "0.16.0",
-      "resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.16.0.tgz",
-      "integrity": "sha512-8tm8vq0SVuQ+VXZFtPIEIronK3102SYCWe8wviWu/5TV4zlDQcf4YdzI6A4CrNqbUc46dD0ngijaKWoRSViI8g==",
+      "version": "0.18.0",
+      "resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.18.0.tgz",
+      "integrity": "sha512-URcHNAqH9X2JvO2skkIisAL4XAcZXxrDC8kcyr453sXQpOHUxicZpXHQb4/arXGvxrWvei3a6zZzpdT1gjeVJA==",
       "dev": true
       "dev": true
     },
     },
     "monaco-languages": {
     "monaco-languages": {
@@ -52,9 +52,9 @@
       "dev": true
       "dev": true
     },
     },
     "typescript": {
     "typescript": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.1.tgz",
-      "integrity": "sha512-64HkdiRv1yYZsSe4xC1WVgamNigVYjlssIoaH2HcZF0+ijsk5YK2g0G34w9wJkze8+5ow4STd22AynfO6ZYYLw==",
+      "version": "3.6.2",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.2.tgz",
+      "integrity": "sha512-lmQ4L+J6mnu3xweP8+rOrUwzmN+MRAj7TgtJtDaXE5PMyX2kCrklhg3rvOsOIfNeAWMQWO2F1GPc1kMD2vLAfw==",
       "dev": true
       "dev": true
     },
     },
     "uglify-js": {
     "uglify-js": {

+ 4 - 3
package.json

@@ -8,7 +8,8 @@
     "compile": "mrmdir ./release && npm run compile-amd && npm run compile-esm",
     "compile": "mrmdir ./release && npm run compile-amd && npm run compile-esm",
     "watch": "tsc -p ./src --watch",
     "watch": "tsc -p ./src --watch",
     "prepublishOnly": "npm run compile && node ./scripts/bundle && mcopy ./src/monaco.d.ts ./release/monaco.d.ts",
     "prepublishOnly": "npm run compile && node ./scripts/bundle && mcopy ./src/monaco.d.ts ./release/monaco.d.ts",
-    "import-typescript": "node ./scripts/importTypescript"
+    "import-typescript": "node ./scripts/importTypescript",
+    "run-nightly": "node ./scripts/runDaily"
   },
   },
   "author": "Microsoft Corporation",
   "author": "Microsoft Corporation",
   "license": "MIT",
   "license": "MIT",
@@ -20,11 +21,11 @@
     "url": "https://github.com/Microsoft/monaco-typescript/issues"
     "url": "https://github.com/Microsoft/monaco-typescript/issues"
   },
   },
   "devDependencies": {
   "devDependencies": {
-    "monaco-editor-core": "^0.16.0",
+    "monaco-editor-core": "^0.18.0",
     "monaco-languages": "^1.7.0",
     "monaco-languages": "^1.7.0",
     "monaco-plugin-helpers": "^1.0.2",
     "monaco-plugin-helpers": "^1.0.2",
     "requirejs": "^2.3.6",
     "requirejs": "^2.3.6",
-    "typescript": "^3.5.1",
+    "typescript": "^3.6.2",
     "uglify-js": "^3.4.9"
     "uglify-js": "^3.4.9"
   }
   }
 }
 }

+ 7 - 0
scripts/importTypescript.js

@@ -39,6 +39,12 @@ const TYPESCRIPT_LIB_DESTINATION = path.join(__dirname, '../src/lib');
 		tsServices.replace(/return require\(fileNameToRequire\);/, `// MONACOCHANGE\n            return undefined;\n            // END MONACOCHANGE`)
 		tsServices.replace(/return require\(fileNameToRequire\);/, `// MONACOCHANGE\n            return undefined;\n            // END MONACOCHANGE`)
 	);
 	);
 
 
+	// Make sure process.args don't get called in the browser, this
+	// should only happen in TS 2.6.2
+	const beforeProcess = `ts.perfLogger.logInfoEvent("Starting TypeScript v" + ts.versionMajorMinor + " with command line: " + JSON.stringify(process.argv));`
+	const afterProcess = `// MONACOCHANGE\n    ts.perfLogger.logInfoEvent("Starting TypeScript v" + ts.versionMajorMinor + " with command line: " + JSON.stringify([]));\n// END MONACOCHANGE`
+	tsServices = tsServices.replace(beforeProcess, afterProcess);
+
 	var tsServices_amd = tsServices +
 	var tsServices_amd = tsServices +
 		`
 		`
 // MONACOCHANGE
 // MONACOCHANGE
@@ -73,6 +79,7 @@ export = ts;
 // END MONACOCHANGE
 // END MONACOCHANGE
 `;
 `;
 	fs.writeFileSync(path.join(TYPESCRIPT_LIB_DESTINATION, 'typescriptServices.d.ts'), dtsServices);
 	fs.writeFileSync(path.join(TYPESCRIPT_LIB_DESTINATION, 'typescriptServices.d.ts'), dtsServices);
+
 })();
 })();
 
 
 function importLibs() {
 function importLibs() {

+ 29 - 0
scripts/runDaily.js

@@ -0,0 +1,29 @@
+// @ts-check
+/*---------------------------------------------------------------------------------------------
+ *  Copyright (c) Microsoft Corporation. All rights reserved.
+ *  Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+const { execSync } = require("child_process");
+const { join } = require("path");
+const { readFileSync, writeFileSync } = require("fs");
+
+// Update to the daily build
+execSync("npm install --save typescript@next");
+
+// Update the dts files
+execSync("npm run import-typescript");
+
+// Sync the versions
+const packagePath = join(__dirname, "../package.json");
+const package = JSON.parse(readFileSync(packagePath, "utf8"));
+
+const tsPackagePath = join(__dirname, "../node_modules/typescript/package.json");
+const tsPackage = JSON.parse(readFileSync(tsPackagePath, "utf8"));
+
+// Set the monaco-typescript version to directly match the typescript nightly version
+package.version = tsPackage.version;
+writeFileSync(packagePath, JSON.stringify(package), "utf8");
+
+// Update the dts files
+execSync("npm run compile");

+ 77 - 23
src/languageFeatures.ts

@@ -23,26 +23,29 @@ enum IndentStyle {
 	Smart = 2
 	Smart = 2
 }
 }
 
 
-function flattenDiagnosticMessageText(messageText: string | ts.DiagnosticMessageChain, newLine: '\n'): string {
-	if (typeof messageText === "string") {
-		return messageText;
-	} else {
-		let diagnosticChain = messageText;
-		let result = "";
-		let indent = 0;
-		while (diagnosticChain) {
-			if (indent) {
-				result += newLine;
-				for (let i = 0; i < indent; i++) {
-					result += "  ";
-				}
-			}
-			result += diagnosticChain.messageText;
-			indent++;
-			diagnosticChain = diagnosticChain.next;
+export function flattenDiagnosticMessageText(diag: string | ts.DiagnosticMessageChain | undefined, newLine: string, indent = 0): string {
+	if (typeof diag === "string") {
+		return diag;
+	}
+	else if (diag === undefined) {
+		return "";
+	}
+	let result = "";
+	if (indent) {
+		result += newLine;
+
+		for (let i = 0; i < indent; i++) {
+			result += "  ";
+		}
+	}
+	result += diag.messageText;
+	indent++;
+	if (diag.next) {
+		for (const kid of diag.next) {
+			result += flattenDiagnosticMessageText(kid, newLine, indent);
 		}
 		}
-		return result;
 	}
 	}
+	return result;
 }
 }
 
 
 function displayPartsToString(displayParts: ts.SymbolDisplayPart[]): string {
 function displayPartsToString(displayParts: ts.SymbolDisplayPart[]): string {
@@ -326,7 +329,7 @@ export class SignatureHelpAdapter extends Adapter implements monaco.languages.Si
 
 
 	public signatureHelpTriggerCharacters = ['(', ','];
 	public signatureHelpTriggerCharacters = ['(', ','];
 
 
-	provideSignatureHelp(model: monaco.editor.IReadOnlyModel, position: Position, token: CancellationToken): Thenable<monaco.languages.SignatureHelp> {
+	provideSignatureHelp(model: monaco.editor.IReadOnlyModel, position: Position, token: CancellationToken): Thenable<monaco.languages.SignatureHelpResult> {
 		let resource = model.uri;
 		let resource = model.uri;
 		return this._worker(resource).then(worker => worker.getSignatureHelpItems(resource.toString(), this._positionToOffset(resource, position))).then(info => {
 		return this._worker(resource).then(worker => worker.getSignatureHelpItems(resource.toString(), this._positionToOffset(resource, position))).then(info => {
 
 
@@ -344,7 +347,6 @@ export class SignatureHelpAdapter extends Adapter implements monaco.languages.Si
 
 
 				let signature: monaco.languages.SignatureInformation = {
 				let signature: monaco.languages.SignatureInformation = {
 					label: '',
 					label: '',
-					documentation: null,
 					parameters: []
 					parameters: []
 				};
 				};
 
 
@@ -365,8 +367,10 @@ export class SignatureHelpAdapter extends Adapter implements monaco.languages.Si
 				ret.signatures.push(signature);
 				ret.signatures.push(signature);
 			});
 			});
 
 
-			return ret;
-
+			return {
+				value: ret,
+				dispose() {}
+			};
 		});
 		});
 	}
 	}
 }
 }
@@ -504,6 +508,7 @@ export class OutlineAdapter extends Adapter implements monaco.languages.Document
 					kind: <monaco.languages.SymbolKind>(outlineTypeTable[item.kind] || monaco.languages.SymbolKind.Variable),
 					kind: <monaco.languages.SymbolKind>(outlineTypeTable[item.kind] || monaco.languages.SymbolKind.Variable),
 					range: this._textSpanToRange(resource, item.spans[0]),
 					range: this._textSpanToRange(resource, item.spans[0]),
 					selectionRange: this._textSpanToRange(resource, item.spans[0]),
 					selectionRange: this._textSpanToRange(resource, item.spans[0]),
+					tags: [],
 					containerName: containerLabel
 					containerName: containerLabel
 				};
 				};
 
 
@@ -644,7 +649,7 @@ export class FormatOnTypeAdapter extends FormatHelper implements monaco.language
 
 
 export class CodeActionAdaptor extends FormatHelper implements monaco.languages.CodeActionProvider {
 export class CodeActionAdaptor extends FormatHelper implements monaco.languages.CodeActionProvider {
 
 
-	public provideCodeActions(model: monaco.editor.ITextModel, range: Range, context: monaco.languages.CodeActionContext, token: CancellationToken): Promise<(monaco.languages.Command | monaco.languages.CodeAction)[]> {
+	public provideCodeActions(model: monaco.editor.ITextModel, range: Range, context: monaco.languages.CodeActionContext, token: CancellationToken): Promise<monaco.languages.CodeActionList> {
 		const resource = model.uri;
 		const resource = model.uri;
 
 
 		return this._worker(resource).then(worker => {
 		return this._worker(resource).then(worker => {
@@ -665,6 +670,11 @@ export class CodeActionAdaptor extends FormatHelper implements monaco.languages.
 			}).map(fix => {
 			}).map(fix => {
 				return this._tsCodeFixActionToMonacoCodeAction(model, context, fix);
 				return this._tsCodeFixActionToMonacoCodeAction(model, context, fix);
 			})
 			})
+		}).then(result => {
+			return {
+				actions: result,
+				dispose: () => {}
+			};
 		});
 		});
 	}
 	}
 
 
@@ -693,3 +703,47 @@ export class CodeActionAdaptor extends FormatHelper implements monaco.languages.
 		return action;
 		return action;
 	}
 	}
 }
 }
+// --- rename ----
+
+export class RenameAdapter extends Adapter implements monaco.languages.RenameProvider {
+
+	async provideRenameEdits(model: monaco.editor.ITextModel, position: Position, newName: string, token: CancellationToken): Promise<monaco.languages.WorkspaceEdit & monaco.languages.Rejection> {
+		const resource = model.uri;
+		const fileName = resource.toString();
+		const offset = this._positionToOffset(resource, position);
+		const worker = await this._worker(resource);
+
+		const renameInfo = await worker.getRenameInfo(fileName, offset, { allowRenameOfImportPath: false });
+		if (renameInfo.canRename === false) { // use explicit comparison so that the discriminated union gets resolved properly
+			return {
+				edits: [],
+				rejectReason: renameInfo.localizedErrorMessage
+			};
+		}
+		if (renameInfo.fileToRename !== undefined) {
+			throw new Error("Renaming files is not supported.");
+		}
+
+		const renameLocations = await worker.findRenameLocations(fileName, offset, /*strings*/ false, /*comments*/ false, /*prefixAndSuffix*/ false);
+		const fileNameToResourceTextEditMap: { [fileName: string]: monaco.languages.ResourceTextEdit } = {};
+
+		const edits: monaco.languages.ResourceTextEdit[] = [];
+		for (const renameLocation of renameLocations) {
+			if (!(renameLocation.fileName in fileNameToResourceTextEditMap)) {
+				const resourceTextEdit = {
+					edits: [],
+					resource: monaco.Uri.parse(renameLocation.fileName)
+				};
+				fileNameToResourceTextEditMap[renameLocation.fileName] = resourceTextEdit;
+				edits.push(resourceTextEdit);
+			}
+
+			fileNameToResourceTextEditMap[renameLocation.fileName].edits.push({
+				range: this._textSpanToRange(resource, renameLocation.textSpan),
+				text: newName
+			});
+		}
+
+		return { edits };
+	}
+}

File diff suppressed because it is too large
+ 0 - 0
src/lib/lib.ts


File diff suppressed because it is too large
+ 239 - 98
src/lib/typescriptServices-amd.js


File diff suppressed because it is too large
+ 4 - 5
src/lib/typescriptServices.d.ts


File diff suppressed because it is too large
+ 239 - 98
src/lib/typescriptServices.js


+ 9 - 3
src/monaco.contribution.ts

@@ -152,18 +152,21 @@ enum ModuleKind {
 	UMD = 3,
 	UMD = 3,
 	System = 4,
 	System = 4,
 	ES2015 = 5,
 	ES2015 = 5,
-	ESNext = 6
+	ESNext = 99
 }
 }
+
 enum JsxEmit {
 enum JsxEmit {
 	None = 0,
 	None = 0,
 	Preserve = 1,
 	Preserve = 1,
 	React = 2,
 	React = 2,
 	ReactNative = 3
 	ReactNative = 3
 }
 }
+
 enum NewLineKind {
 enum NewLineKind {
 	CarriageReturnLineFeed = 0,
 	CarriageReturnLineFeed = 0,
 	LineFeed = 1
 	LineFeed = 1
 }
 }
+
 enum ScriptTarget {
 enum ScriptTarget {
 	ES3 = 0,
 	ES3 = 0,
 	ES5 = 1,
 	ES5 = 1,
@@ -171,10 +174,13 @@ enum ScriptTarget {
 	ES2016 = 3,
 	ES2016 = 3,
 	ES2017 = 4,
 	ES2017 = 4,
 	ES2018 = 5,
 	ES2018 = 5,
-	ESNext = 6,
+	ES2019 = 6,
+	ES2020 = 7,
+	ESNext = 99,
 	JSON = 100,
 	JSON = 100,
-	Latest = 6
+	Latest = ESNext,
 }
 }
+
 enum ModuleResolutionKind {
 enum ModuleResolutionKind {
 	Classic = 1,
 	Classic = 1,
 	NodeJs = 2
 	NodeJs = 2

+ 6 - 3
src/monaco.d.ts

@@ -8,8 +8,9 @@ declare module monaco.languages.typescript {
         UMD = 3,
         UMD = 3,
         System = 4,
         System = 4,
         ES2015 = 5,
         ES2015 = 5,
-        ESNext = 6
+        ESNext = 99
     }
     }
+
     enum JsxEmit {
     enum JsxEmit {
         None = 0,
         None = 0,
         Preserve = 1,
         Preserve = 1,
@@ -28,9 +29,11 @@ declare module monaco.languages.typescript {
         ES2016 = 3,
         ES2016 = 3,
         ES2017 = 4,
         ES2017 = 4,
         ES2018 = 5,
         ES2018 = 5,
-        ESNext = 6,
+        ES2019 = 6,
+        ES2020 = 7,
+        ESNext = 99,
         JSON = 100,
         JSON = 100,
-        Latest = 6
+        Latest = ESNext,
     }
     }
 
 
     export enum ModuleResolutionKind {
     export enum ModuleResolutionKind {

+ 1 - 1
src/tsMode.ts

@@ -65,7 +65,7 @@ function setupMode(defaults: LanguageServiceDefaultsImpl, modeId: string): (firs
 	monaco.languages.registerDocumentRangeFormattingEditProvider(modeId, new languageFeatures.FormatAdapter(worker));
 	monaco.languages.registerDocumentRangeFormattingEditProvider(modeId, new languageFeatures.FormatAdapter(worker));
 	monaco.languages.registerOnTypeFormattingEditProvider(modeId, new languageFeatures.FormatOnTypeAdapter(worker));
 	monaco.languages.registerOnTypeFormattingEditProvider(modeId, new languageFeatures.FormatOnTypeAdapter(worker));
 	monaco.languages.registerCodeActionProvider(modeId, new languageFeatures.CodeActionAdaptor(worker));
 	monaco.languages.registerCodeActionProvider(modeId, new languageFeatures.CodeActionAdaptor(worker));
-
+	monaco.languages.registerRenameProvider(modeId, new languageFeatures.RenameAdapter(worker));
 	new languageFeatures.DiagnostcsAdapter(defaults, modeId, worker);
 	new languageFeatures.DiagnostcsAdapter(defaults, modeId, worker);
 
 
 	return worker;
 	return worker;

+ 8 - 0
src/tsWorker.ts

@@ -202,6 +202,14 @@ export class TypeScriptWorker implements ts.LanguageServiceHost {
 		return Promise.resolve(this._languageService.getFormattingEditsAfterKeystroke(fileName, postion, ch, options));
 		return Promise.resolve(this._languageService.getFormattingEditsAfterKeystroke(fileName, postion, ch, options));
 	}
 	}
 
 
+	findRenameLocations(fileName: string, positon: number, findInStrings: boolean, findInComments: boolean, providePrefixAndSuffixTextForRename: boolean): Promise<readonly ts.RenameLocation[]> {
+		return Promise.resolve(this._languageService.findRenameLocations(fileName, positon, findInStrings, findInComments, providePrefixAndSuffixTextForRename));
+	}
+
+	getRenameInfo(fileName: string, positon: number, options: ts.RenameInfoOptions): Promise<ts.RenameInfo> {
+		return Promise.resolve(this._languageService.getRenameInfo(fileName, positon, options));
+	}
+
 	getEmitOutput(fileName: string): Promise<ts.EmitOutput> {
 	getEmitOutput(fileName: string): Promise<ts.EmitOutput> {
 		return Promise.resolve(this._languageService.getEmitOutput(fileName));
 		return Promise.resolve(this._languageService.getEmitOutput(fileName));
 	}
 	}

Some files were not shown because too many files changed in this diff