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

This commit is contained in:
Alex Dima 2019-09-19 09:19:03 +02:00
commit 559bc5255a
14 changed files with 15714 additions and 8683 deletions

25
azure-pipelines.yml Normal file
View file

@ -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'

12
package-lock.json generated
View file

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

View file

@ -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"
} }
} }

View file

@ -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
scripts/runDaily.js Normal file
View file

@ -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");

View file

@ -23,26 +23,29 @@ enum IndentStyle {
Smart = 2 Smart = 2
} }
function flattenDiagnosticMessageText(messageText: string | ts.DiagnosticMessageChain, newLine: '\n'): string { export function flattenDiagnosticMessageText(diag: string | ts.DiagnosticMessageChain | undefined, newLine: string, indent = 0): string {
if (typeof messageText === "string") { if (typeof diag === "string") {
return messageText; return diag;
} 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;
}
return result;
} }
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;
} }
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 one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -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

9
src/monaco.d.ts vendored
View file

@ -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 {

View file

@ -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;

View file

@ -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));
} }