Merge VS Code 1.21 source code (#1067)

* Initial VS Code 1.21 file copy with patches

* A few more merges

* Post npm install

* Fix batch of build breaks

* Fix more build breaks

* Fix more build errors

* Fix more build breaks

* Runtime fixes 1

* Get connection dialog working with some todos

* Fix a few packaging issues

* Copy several node_modules to package build to fix loader issues

* Fix breaks from master

* A few more fixes

* Make tests pass

* First pass of license header updates

* Second pass of license header updates

* Fix restore dialog issues

* Remove add additional themes menu items

* fix select box issues where the list doesn't show up

* formatting

* Fix editor dispose issue

* Copy over node modules to correct location on all platforms
This commit is contained in:
Karl Burtram
2018-04-04 15:27:51 -07:00
committed by GitHub
parent 5fba3e31b4
commit dafb780987
9412 changed files with 141255 additions and 98813 deletions

View File

@@ -13,21 +13,30 @@ import { RunOnceScheduler, Delayer } from 'vs/base/common/async';
import { KeyCode, KeyMod, KeyChord } from 'vs/base/common/keyCodes';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { TPromise } from 'vs/base/common/winjs.base';
import { ScrollType, IModel, IEditorContribution } from 'vs/editor/common/editorCommon';
import { ScrollType, IEditorContribution } from 'vs/editor/common/editorCommon';
import { ITextModel } from 'vs/editor/common/model';
import { registerEditorAction, registerEditorContribution, ServicesAccessor, EditorAction, registerInstantiatedEditorAction } from 'vs/editor/browser/editorExtensions';
import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser';
import { FoldingModel, setCollapseStateAtLevel, CollapseMemento, setCollapseStateLevelsDown, setCollapseStateLevelsUp, setCollapseStateForMatchingLines } from 'vs/editor/contrib/folding/foldingModel';
import { FoldingModel, setCollapseStateAtLevel, CollapseMemento, setCollapseStateLevelsDown, setCollapseStateLevelsUp, setCollapseStateForMatchingLines, setCollapseStateForType } from 'vs/editor/contrib/folding/foldingModel';
import { FoldingDecorationProvider } from './foldingDecorations';
import { FoldingRegions } from './foldingRanges';
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
import { IConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions';
import { IMarginData, IEmptyContentData } from 'vs/editor/browser/controller/mouseTarget';
import { HiddenRangeModel } from 'vs/editor/contrib/folding/hiddenRangeModel';
import { IRange } from 'vs/editor/common/core/range';
import { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageConfigurationRegistry';
import { computeRanges as computeIndentRanges } from 'vs/editor/contrib/folding/indentRangeProvider';
import { IndentRangeProvider } from 'vs/editor/contrib/folding/indentRangeProvider';
import { IPosition } from 'vs/editor/common/core/position';
import { FoldingProviderRegistry, FoldingRangeType } from 'vs/editor/common/modes';
import { SyntaxRangeProvider } from './syntaxRangeProvider';
export const ID = 'editor.contrib.folding';
export interface RangeProvider {
compute(editorModel: ITextModel): TPromise<FoldingRegions>;
}
export class FoldingController implements IEditorContribution {
static MAX_FOLDING_REGIONS = 5000;
@@ -46,6 +55,8 @@ export class FoldingController implements IEditorContribution {
private foldingModel: FoldingModel;
private hiddenRangeModel: HiddenRangeModel;
private rangeProvider: RangeProvider;
private foldingModelPromise: TPromise<FoldingModel>;
private updateScheduler: Delayer<FoldingModel>;
@@ -67,6 +78,7 @@ export class FoldingController implements IEditorContribution {
this.foldingDecorationProvider.autoHideFoldingControls = this._autoHideFoldingControls;
this.globalToDispose.push(this.editor.onDidChangeModel(() => this.onModelChanged()));
this.globalToDispose.push(FoldingProviderRegistry.onDidChange(() => this.onModelChanged()));
this.globalToDispose.push(this.editor.onDidChangeConfiguration((e: IConfigurationChangedEvent) => {
if (e.contribInfo) {
@@ -100,10 +112,14 @@ export class FoldingController implements IEditorContribution {
*/
public saveViewState(): { collapsedRegions?: CollapseMemento, lineCount?: number } {
let model = this.editor.getModel();
if (!model || !this._isEnabled) {
if (!model || !this._isEnabled || model.isTooLargeForTokenization()) {
return {};
}
return { collapsedRegions: this.foldingModel.getMemento(), lineCount: model.getLineCount() };
if (this.foldingModel) { // disposed ?
let collapsedRegions = this.foldingModel.isInitialized ? this.foldingModel.getMemento() : this.hiddenRangeModel.getMemento();
return { collapsedRegions, lineCount: model.getLineCount() };
}
return void 0;
}
/**
@@ -111,7 +127,7 @@ export class FoldingController implements IEditorContribution {
*/
public restoreViewState(state: { collapsedRegions?: CollapseMemento, lineCount?: number }): void {
let model = this.editor.getModel();
if (!model || !this._isEnabled) {
if (!model || !this._isEnabled || model.isTooLargeForTokenization()) {
return;
}
if (!state || !state.collapsedRegions || state.lineCount !== model.getLineCount()) {
@@ -132,7 +148,8 @@ export class FoldingController implements IEditorContribution {
this.localToDispose = dispose(this.localToDispose);
let model = this.editor.getModel();
if (!this._isEnabled || !model) {
if (!this._isEnabled || !model || model.isTooLargeForTokenization()) {
// huge files get no view model, so they cannot support hidden areas
return;
}
@@ -160,17 +177,22 @@ export class FoldingController implements IEditorContribution {
this.foldingModelPromise = null;
this.hiddenRangeModel = null;
this.cursorChangedScheduler = null;
this.rangeProvider = null;
}
});
this.onModelContentChanged();
}
private computeRanges(editorModel: IModel) {
let foldingRules = LanguageConfigurationRegistry.getFoldingRules(editorModel.getLanguageIdentifier().id);
let offSide = foldingRules && foldingRules.offSide;
let markers = foldingRules && foldingRules.markers;
let ranges = computeIndentRanges(editorModel, offSide, markers);
return ranges;
private getRangeProvider(): RangeProvider {
if (!this.rangeProvider) {
let foldingProviders = FoldingProviderRegistry.ordered(this.foldingModel.textModel);
if (foldingProviders.length) {
this.rangeProvider = new SyntaxRangeProvider(foldingProviders);
} else {
this.rangeProvider = new IndentRangeProvider();
}
}
return this.rangeProvider;
}
public getFoldingModel() {
@@ -184,9 +206,14 @@ export class FoldingController implements IEditorContribution {
// some cursors might have moved into hidden regions, make sure they are in expanded regions
let selections = this.editor.getSelections();
let selectionLineNumbers = selections ? selections.map(s => s.startLineNumber) : [];
this.foldingModel.update(this.computeRanges(this.foldingModel.textModel), selectionLineNumbers);
return this.getRangeProvider().compute(this.foldingModel.textModel).then(foldingRanges => {
if (this.foldingModel) { // null if editor has been disposed, or folding turned off
this.foldingModel.update(foldingRanges, selectionLineNumbers);
}
return this.foldingModel;
});
}
return this.foldingModel;
return null;
});
}
}
@@ -213,14 +240,18 @@ export class FoldingController implements IEditorContribution {
this.getFoldingModel().then(foldingModel => { // null is returned if folding got disabled in the meantime
if (foldingModel) {
let selections = this.editor.getSelections();
if (selections) {
if (selections && selections.length > 0) {
let toToggle = [];
for (let selection of selections) {
let lineNumber = selection.selectionStartLineNumber;
if (this.hiddenRangeModel.isHidden(lineNumber)) {
let toToggle = foldingModel.getAllRegionsAtLine(lineNumber, r => r.isCollapsed && lineNumber > r.startLineNumber);
foldingModel.toggleCollapseState(toToggle);
toToggle.push(...foldingModel.getAllRegionsAtLine(lineNumber, r => r.isCollapsed && lineNumber > r.startLineNumber));
}
}
if (toToggle.length) {
foldingModel.toggleCollapseState(toToggle);
this.reveal(selections[0].getPosition());
}
}
}
});
@@ -311,15 +342,15 @@ export class FoldingController implements IEditorContribution {
toToggle.push(...foldingModel.getRegionsInside(region, r => r.isCollapsed === isCollapsed));
}
foldingModel.toggleCollapseState(toToggle);
this.reveal(lineNumber);
this.reveal({ lineNumber, column: 1 });
}
}
}
});
}
public reveal(focusLine: number): void {
this.editor.revealPositionInCenterIfOutsideViewport({ lineNumber: focusLine, column: 1 }, ScrollType.Smooth);
public reveal(position: IPosition): void {
this.editor.revealPositionInCenterIfOutsideViewport(position, ScrollType.Smooth);
}
}
@@ -332,12 +363,16 @@ abstract class FoldingAction<T> extends EditorAction {
if (!foldingController) {
return;
}
this.reportTelemetry(accessor, editor);
return foldingController.getFoldingModel().then(foldingModel => {
if (foldingModel) {
this.invoke(foldingController, foldingModel, editor, args);
}
});
let foldingModelPromise = foldingController.getFoldingModel();
if (foldingModelPromise) {
this.reportTelemetry(accessor, editor);
return foldingModelPromise.then(foldingModel => {
if (foldingModel) {
this.invoke(foldingController, foldingModel, editor, args);
foldingController.reveal(editor.getSelection().getStartPosition());
}
});
}
}
protected getSelectedLines(editor: ICodeEditor) {
@@ -505,10 +540,6 @@ class FoldRecursivelyAction extends FoldingAction<void> {
invoke(foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {
let selectedLines = this.getSelectedLines(editor);
setCollapseStateLevelsDown(foldingModel, true, Number.MAX_VALUE, selectedLines);
if (selectedLines.length > 0) {
foldingController.reveal(selectedLines[0]);
}
}
}
@@ -528,10 +559,14 @@ class FoldAllBlockCommentsAction extends FoldingAction<void> {
}
invoke(foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {
let comments = LanguageConfigurationRegistry.getComments(editor.getModel().getLanguageIdentifier().id);
if (comments && comments.blockCommentStartToken) {
let regExp = new RegExp('^\\s*' + escapeRegExpCharacters(comments.blockCommentStartToken));
setCollapseStateForMatchingLines(foldingModel, regExp, true);
if (foldingModel.regions.hasTypes()) {
setCollapseStateForType(foldingModel, FoldingRangeType.Comment, true);
} else {
let comments = LanguageConfigurationRegistry.getComments(editor.getModel().getLanguageIdentifier().id);
if (comments && comments.blockCommentStartToken) {
let regExp = new RegExp('^\\s*' + escapeRegExpCharacters(comments.blockCommentStartToken));
setCollapseStateForMatchingLines(foldingModel, regExp, true);
}
}
}
}
@@ -552,10 +587,14 @@ class FoldAllRegionsAction extends FoldingAction<void> {
}
invoke(foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {
let foldingRules = LanguageConfigurationRegistry.getFoldingRules(editor.getModel().getLanguageIdentifier().id);
if (foldingRules && foldingRules.markers && foldingRules.markers.start) {
let regExp = new RegExp(foldingRules.markers.start);
setCollapseStateForMatchingLines(foldingModel, regExp, true);
if (foldingModel.regions.hasTypes()) {
setCollapseStateForType(foldingModel, FoldingRangeType.Region, true);
} else {
let foldingRules = LanguageConfigurationRegistry.getFoldingRules(editor.getModel().getLanguageIdentifier().id);
if (foldingRules && foldingRules.markers && foldingRules.markers.start) {
let regExp = new RegExp(foldingRules.markers.start);
setCollapseStateForMatchingLines(foldingModel, regExp, true);
}
}
}
}
@@ -576,10 +615,14 @@ class UnfoldAllRegionsAction extends FoldingAction<void> {
}
invoke(foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {
let foldingRules = LanguageConfigurationRegistry.getFoldingRules(editor.getModel().getLanguageIdentifier().id);
if (foldingRules && foldingRules.markers && foldingRules.markers.start) {
let regExp = new RegExp(foldingRules.markers.start);
setCollapseStateForMatchingLines(foldingModel, regExp, false);
if (foldingModel.regions.hasTypes()) {
setCollapseStateForType(foldingModel, FoldingRangeType.Region, false);
} else {
let foldingRules = LanguageConfigurationRegistry.getFoldingRules(editor.getModel().getLanguageIdentifier().id);
if (foldingRules && foldingRules.markers && foldingRules.markers.start) {
let regExp = new RegExp(foldingRules.markers.start);
setCollapseStateForMatchingLines(foldingModel, regExp, false);
}
}
}
}