Skip to content

Commit 67eacaa

Browse files
committed
Use const enums (and generate non-const ones for standalone editor)
1 parent e3f803d commit 67eacaa

21 files changed

Lines changed: 813 additions & 507 deletions

File tree

build/lib/compilation.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,13 +199,15 @@ class MonacoGenerator {
199199
const result = this._run();
200200
if (!result) {
201201
// nothing really changed
202+
this._log(`monaco.d.ts is unchanged - total time took ${Date.now() - startTime} ms`);
202203
return;
203204
}
204205
if (result.isTheSame) {
205206
this._log(`monaco.d.ts is unchanged - total time took ${Date.now() - startTime} ms`);
206207
return;
207208
}
208209
fs.writeFileSync(result.filePath, result.content);
210+
fs.writeFileSync(path.join(REPO_SRC_FOLDER, 'vs/editor/common/standalone/standaloneEnums.ts'), result.enums);
209211
this._log(`monaco.d.ts is changed - total time took ${Date.now() - startTime} ms`);
210212
if (!this._isWatch) {
211213
this.stream.emit('error', 'monaco.d.ts is no longer up to date. Please run gulp watch and commit the new file.');

build/lib/compilation.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,7 @@ class MonacoGenerator {
254254
const result = this._run();
255255
if (!result) {
256256
// nothing really changed
257+
this._log(`monaco.d.ts is unchanged - total time took ${Date.now() - startTime} ms`);
257258
return;
258259
}
259260
if (result.isTheSame) {
@@ -262,6 +263,7 @@ class MonacoGenerator {
262263
}
263264

264265
fs.writeFileSync(result.filePath, result.content);
266+
fs.writeFileSync(path.join(REPO_SRC_FOLDER, 'vs/editor/common/standalone/standaloneEnums.ts'), result.enums);
265267
this._log(`monaco.d.ts is changed - total time took ${Date.now() - startTime} ms`);
266268
if (!this._isWatch) {
267269
this.stream.emit('error', 'monaco.d.ts is no longer up to date. Please run gulp watch and commit the new file.');

build/monaco/api.js

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ function isDefaultExport(declaration) {
120120
return (hasModifier(declaration.modifiers, ts.SyntaxKind.DefaultKeyword)
121121
&& hasModifier(declaration.modifiers, ts.SyntaxKind.ExportKeyword));
122122
}
123-
function getMassagedTopLevelDeclarationText(sourceFile, declaration, importName, usage) {
123+
function getMassagedTopLevelDeclarationText(sourceFile, declaration, importName, usage, enums) {
124124
let result = getNodeText(sourceFile, declaration);
125125
if (declaration.kind === ts.SyntaxKind.InterfaceDeclaration || declaration.kind === ts.SyntaxKind.ClassDeclaration) {
126126
let interfaceDeclaration = declaration;
@@ -160,6 +160,10 @@ function getMassagedTopLevelDeclarationText(sourceFile, declaration, importName,
160160
}
161161
result = result.replace(/export default/g, 'export');
162162
result = result.replace(/export declare/g, 'export');
163+
if (declaration.kind === ts.SyntaxKind.EnumDeclaration) {
164+
result = result.replace(/const enum/, 'enum');
165+
enums.push(result);
166+
}
163167
return result;
164168
}
165169
function format(text, endl) {
@@ -318,6 +322,7 @@ function generateDeclarationFile(recipe, sourceFileGetter) {
318322
usageImports.push(`import * as ${importName} from './${moduleId.replace(/\.d\.ts$/, '')}';`);
319323
return importName;
320324
};
325+
let enums = [];
321326
lines.forEach(line => {
322327
let m1 = line.match(/^\s*#include\(([^;)]*)(;[^)]*)?\)\:(.*)$/);
323328
if (m1) {
@@ -340,7 +345,7 @@ function generateDeclarationFile(recipe, sourceFileGetter) {
340345
logErr('Cannot find type ' + typeName);
341346
return;
342347
}
343-
result.push(replacer(getMassagedTopLevelDeclarationText(sourceFile, declaration, importName, usage)));
348+
result.push(replacer(getMassagedTopLevelDeclarationText(sourceFile, declaration, importName, usage, enums)));
344349
});
345350
return;
346351
}
@@ -380,7 +385,7 @@ function generateDeclarationFile(recipe, sourceFileGetter) {
380385
}
381386
}
382387
}
383-
result.push(replacer(getMassagedTopLevelDeclarationText(sourceFile, declaration, importName, usage)));
388+
result.push(replacer(getMassagedTopLevelDeclarationText(sourceFile, declaration, importName, usage, enums)));
384389
});
385390
return;
386391
}
@@ -390,9 +395,20 @@ function generateDeclarationFile(recipe, sourceFileGetter) {
390395
resultTxt = resultTxt.replace(/\bURI\b/g, 'Uri');
391396
resultTxt = resultTxt.replace(/\bEvent</g, 'IEvent<');
392397
resultTxt = format(resultTxt, endl);
398+
let resultEnums = [
399+
'/*---------------------------------------------------------------------------------------------',
400+
' * Copyright (c) Microsoft Corporation. All rights reserved.',
401+
' * Licensed under the MIT License. See License.txt in the project root for license information.',
402+
' *--------------------------------------------------------------------------------------------*/',
403+
'',
404+
'// THIS IS A GENERATED FILE. DO NOT EDIT DIRECTLY.',
405+
''
406+
].concat(enums).join(endl);
407+
resultEnums = format(resultEnums, endl);
393408
return [
394409
resultTxt,
395-
`${usageImports.join('\n')}\n\n${usage.join('\n')}`
410+
`${usageImports.join('\n')}\n\n${usage.join('\n')}`,
411+
resultEnums
396412
];
397413
}
398414
function getIncludesInRecipe() {
@@ -423,7 +439,7 @@ exports.getFilesToWatch = getFilesToWatch;
423439
function _run(sourceFileGetter) {
424440
log('Starting monaco.d.ts generation');
425441
const recipe = fs.readFileSync(exports.RECIPE_PATH).toString();
426-
const [result, usageContent] = generateDeclarationFile(recipe, sourceFileGetter);
442+
const [result, usageContent, enums] = generateDeclarationFile(recipe, sourceFileGetter);
427443
const currentContent = fs.readFileSync(DECLARATION_PATH).toString();
428444
const one = currentContent.replace(/\r\n/gm, '\n');
429445
const other = result.replace(/\r\n/gm, '\n');
@@ -432,6 +448,7 @@ function _run(sourceFileGetter) {
432448
return {
433449
content: result,
434450
usageContent: usageContent,
451+
enums: enums,
435452
filePath: DECLARATION_PATH,
436453
isTheSame
437454
};

build/monaco/api.ts

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ function isDefaultExport(declaration: ts.InterfaceDeclaration | ts.ClassDeclarat
152152
);
153153
}
154154

155-
function getMassagedTopLevelDeclarationText(sourceFile: ts.SourceFile, declaration: TSTopLevelDeclare, importName: string, usage: string[]): string {
155+
function getMassagedTopLevelDeclarationText(sourceFile: ts.SourceFile, declaration: TSTopLevelDeclare, importName: string, usage: string[], enums: string[]): string {
156156
let result = getNodeText(sourceFile, declaration);
157157
if (declaration.kind === ts.SyntaxKind.InterfaceDeclaration || declaration.kind === ts.SyntaxKind.ClassDeclaration) {
158158
let interfaceDeclaration = <ts.InterfaceDeclaration | ts.ClassDeclaration>declaration;
@@ -194,6 +194,12 @@ function getMassagedTopLevelDeclarationText(sourceFile: ts.SourceFile, declarati
194194
}
195195
result = result.replace(/export default/g, 'export');
196196
result = result.replace(/export declare/g, 'export');
197+
198+
if (declaration.kind === ts.SyntaxKind.EnumDeclaration) {
199+
result = result.replace(/const enum/, 'enum');
200+
enums.push(result);
201+
}
202+
197203
return result;
198204
}
199205

@@ -356,7 +362,7 @@ function createReplacer(data: string): (str: string) => string {
356362
};
357363
}
358364

359-
function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGetter): [string, string] {
365+
function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGetter): [string, string, string] {
360366
const endl = /\r\n/.test(recipe) ? '\r\n' : '\n';
361367

362368
let lines = recipe.split(endl);
@@ -375,6 +381,8 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
375381
return importName;
376382
};
377383

384+
let enums: string[] = [];
385+
378386
lines.forEach(line => {
379387

380388
let m1 = line.match(/^\s*#include\(([^;)]*)(;[^)]*)?\)\:(.*)$/);
@@ -401,7 +409,7 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
401409
logErr('Cannot find type ' + typeName);
402410
return;
403411
}
404-
result.push(replacer(getMassagedTopLevelDeclarationText(sourceFile, declaration, importName, usage)));
412+
result.push(replacer(getMassagedTopLevelDeclarationText(sourceFile, declaration, importName, usage, enums)));
405413
});
406414
return;
407415
}
@@ -445,7 +453,7 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
445453
}
446454
}
447455
}
448-
result.push(replacer(getMassagedTopLevelDeclarationText(sourceFile, declaration, importName, usage)));
456+
result.push(replacer(getMassagedTopLevelDeclarationText(sourceFile, declaration, importName, usage, enums)));
449457
});
450458
return;
451459
}
@@ -456,12 +464,23 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
456464
let resultTxt = result.join(endl);
457465
resultTxt = resultTxt.replace(/\bURI\b/g, 'Uri');
458466
resultTxt = resultTxt.replace(/\bEvent</g, 'IEvent<');
459-
460467
resultTxt = format(resultTxt, endl);
461468

469+
let resultEnums = [
470+
'/*---------------------------------------------------------------------------------------------',
471+
' * Copyright (c) Microsoft Corporation. All rights reserved.',
472+
' * Licensed under the MIT License. See License.txt in the project root for license information.',
473+
' *--------------------------------------------------------------------------------------------*/',
474+
'',
475+
'// THIS IS A GENERATED FILE. DO NOT EDIT DIRECTLY.',
476+
''
477+
].concat(enums).join(endl);
478+
resultEnums = format(resultEnums, endl);
479+
462480
return [
463481
resultTxt,
464-
`${usageImports.join('\n')}\n\n${usage.join('\n')}`
482+
`${usageImports.join('\n')}\n\n${usage.join('\n')}`,
483+
resultEnums
465484
];
466485
}
467486

@@ -497,6 +516,7 @@ export function getFilesToWatch(out: string): string[] {
497516
export interface IMonacoDeclarationResult {
498517
content: string;
499518
usageContent: string;
519+
enums: string;
500520
filePath: string;
501521
isTheSame: boolean;
502522
}
@@ -505,7 +525,7 @@ function _run(sourceFileGetter: SourceFileGetter): IMonacoDeclarationResult {
505525
log('Starting monaco.d.ts generation');
506526

507527
const recipe = fs.readFileSync(RECIPE_PATH).toString();
508-
const [result, usageContent] = generateDeclarationFile(recipe, sourceFileGetter);
528+
const [result, usageContent, enums] = generateDeclarationFile(recipe, sourceFileGetter);
509529

510530
const currentContent = fs.readFileSync(DECLARATION_PATH).toString();
511531
const one = currentContent.replace(/\r\n/gm, '\n');
@@ -517,6 +537,7 @@ function _run(sourceFileGetter: SourceFileGetter): IMonacoDeclarationResult {
517537
return {
518538
content: result,
519539
usageContent: usageContent,
540+
enums: enums,
520541
filePath: DECLARATION_PATH,
521542
isTheSame
522543
};

build/monaco/monaco.d.ts.recipe

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,12 @@ declare namespace monaco {
2525
dispose(): void;
2626
}
2727

28-
export enum MarkerTag {
29-
Unnecessary = 1,
30-
}
31-
32-
export enum MarkerSeverity {
33-
Hint = 1,
34-
Info = 2,
35-
Warning = 4,
36-
Error = 8,
37-
}
38-
28+
#include(vs/platform/markers/common/markers): MarkerTag, MarkerSeverity
3929
#include(vs/base/common/winjs.base.d.ts): Promise
4030
#include(vs/base/common/cancellation): CancellationTokenSource, CancellationToken
4131
#include(vs/base/common/uri): URI, UriComponents
42-
#include(vs/editor/common/standalone/standaloneBase): KeyCode, KeyMod
32+
#include(vs/base/common/keyCodes): KeyCode
33+
#include(vs/editor/common/standalone/standaloneBase): KeyMod
4334
#include(vs/base/common/htmlContent): IMarkdownString
4435
#include(vs/base/browser/keyboardEvent): IKeyboardEvent
4536
#include(vs/base/browser/mouseEvent): IMouseEvent

src/vs/base/common/scrollable.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import { Disposable, IDisposable } from 'vs/base/common/lifecycle';
77
import { Event, Emitter } from 'vs/base/common/event';
88

9-
export enum ScrollbarVisibility {
9+
export const enum ScrollbarVisibility {
1010
Auto = 1,
1111
Hidden = 2,
1212
Visible = 3

src/vs/editor/browser/editorBrowser.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ export interface IViewZoneChangeAccessor {
9999
/**
100100
* A positioning preference for rendering content widgets.
101101
*/
102-
export enum ContentWidgetPositionPreference {
102+
export const enum ContentWidgetPositionPreference {
103103
/**
104104
* Place the content widget exactly at a position
105105
*/
@@ -160,7 +160,7 @@ export interface IContentWidget {
160160
/**
161161
* A positioning preference for rendering overlay widgets.
162162
*/
163-
export enum OverlayWidgetPositionPreference {
163+
export const enum OverlayWidgetPositionPreference {
164164
/**
165165
* Position the overlay widget in the top right corner
166166
*/
@@ -207,7 +207,7 @@ export interface IOverlayWidget {
207207
/**
208208
* Type of hit element with the mouse in the editor.
209209
*/
210-
export enum MouseTargetType {
210+
export const enum MouseTargetType {
211211
/**
212212
* Mouse is on top of an unknown element.
213213
*/

src/vs/editor/browser/viewParts/minimap/minimap.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,7 @@ import { GlobalMouseMoveMonitor, IStandardMouseMoveEventData, standardMouseMoveM
2525
import * as platform from 'vs/base/common/platform';
2626
import { registerThemingParticipant } from 'vs/platform/theme/common/themeService';
2727
import { scrollbarSliderBackground, scrollbarSliderHoverBackground, scrollbarSliderActiveBackground, scrollbarShadow } from 'vs/platform/theme/common/colorRegistry';
28-
29-
const enum RenderMinimap {
30-
None = 0,
31-
Small = 1,
32-
Large = 2,
33-
SmallBlocks = 3,
34-
LargeBlocks = 4,
35-
}
28+
import { RenderMinimap } from 'vs/editor/common/config/editorOptions';
3629

3730
function getMinimapLineHeight(renderMinimap: RenderMinimap): number {
3831
if (renderMinimap === RenderMinimap.Large) {

src/vs/editor/common/config/editorOptions.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -705,7 +705,7 @@ export interface IDiffEditorOptions extends IEditorOptions {
705705
originalEditable?: boolean;
706706
}
707707

708-
export enum RenderMinimap {
708+
export const enum RenderMinimap {
709709
None = 0,
710710
Small = 1,
711711
Large = 2,
@@ -716,7 +716,7 @@ export enum RenderMinimap {
716716
/**
717717
* Describes how to indent wrapped lines.
718718
*/
719-
export enum WrappingIndent {
719+
export const enum WrappingIndent {
720720
/**
721721
* No indentation => wrapped lines begin at column 1.
722722
*/
@@ -738,7 +738,7 @@ export enum WrappingIndent {
738738
/**
739739
* The kind of animation in which the editor's cursor should be rendered.
740740
*/
741-
export enum TextEditorCursorBlinkingStyle {
741+
export const enum TextEditorCursorBlinkingStyle {
742742
/**
743743
* Hidden
744744
*/

src/vs/editor/common/controller/cursorEvents.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { Selection } from 'vs/editor/common/core/selection';
99
/**
1010
* Describes the reason the cursor has changed its position.
1111
*/
12-
export enum CursorChangeReason {
12+
export const enum CursorChangeReason {
1313
/**
1414
* Unknown or not set.
1515
*/

0 commit comments

Comments
 (0)