mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-03-23 13:20:30 -04:00
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:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user