mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-03-21 04:20:11 -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:
@@ -3,9 +3,9 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { IModel, IModelDecorationOptions, IModelDeltaDecoration, IModelDecorationsChangeAccessor } from 'vs/editor/common/editorCommon';
|
||||
import { ITextModel, IModelDecorationOptions, IModelDeltaDecoration, IModelDecorationsChangeAccessor } from 'vs/editor/common/model';
|
||||
import Event, { Emitter } from 'vs/base/common/event';
|
||||
import { FoldingRanges, ILineRange, FoldingRegion } from './foldingRanges';
|
||||
import { FoldingRegions, ILineRange, FoldingRegion } from './foldingRanges';
|
||||
|
||||
export interface IDecorationProvider {
|
||||
getDecorationOption(isCollapsed: boolean): IModelDecorationOptions;
|
||||
@@ -21,23 +21,26 @@ export interface FoldingModelChangeEvent {
|
||||
export type CollapseMemento = ILineRange[];
|
||||
|
||||
export class FoldingModel {
|
||||
private _textModel: IModel;
|
||||
private _textModel: ITextModel;
|
||||
private _decorationProvider: IDecorationProvider;
|
||||
|
||||
private _ranges: FoldingRanges;
|
||||
private _regions: FoldingRegions;
|
||||
private _editorDecorationIds: string[];
|
||||
private _isInitialized: boolean;
|
||||
|
||||
private _updateEventEmitter = new Emitter<FoldingModelChangeEvent>();
|
||||
|
||||
public get ranges(): FoldingRanges { return this._ranges; }
|
||||
public get regions(): FoldingRegions { return this._regions; }
|
||||
public get onDidChange(): Event<FoldingModelChangeEvent> { return this._updateEventEmitter.event; }
|
||||
public get textModel() { return this._textModel; }
|
||||
public get isInitialized() { return this._isInitialized; }
|
||||
|
||||
constructor(textModel: IModel, decorationProvider: IDecorationProvider) {
|
||||
constructor(textModel: ITextModel, decorationProvider: IDecorationProvider) {
|
||||
this._textModel = textModel;
|
||||
this._decorationProvider = decorationProvider;
|
||||
this._ranges = new FoldingRanges(new Uint32Array(0), new Uint32Array(0));
|
||||
this._regions = new FoldingRegions(new Uint32Array(0), new Uint32Array(0));
|
||||
this._editorDecorationIds = [];
|
||||
this._isInitialized = false;
|
||||
}
|
||||
|
||||
public toggleCollapseState(regions: FoldingRegion[]) {
|
||||
@@ -51,8 +54,8 @@ export class FoldingModel {
|
||||
let editorDecorationId = this._editorDecorationIds[index];
|
||||
if (editorDecorationId && !processed[editorDecorationId]) {
|
||||
processed[editorDecorationId] = true;
|
||||
let newCollapseState = !this._ranges.isCollapsed(index);
|
||||
this._ranges.setCollapsed(index, newCollapseState);
|
||||
let newCollapseState = !this._regions.isCollapsed(index);
|
||||
this._regions.setCollapsed(index, newCollapseState);
|
||||
accessor.changeDecorationOptions(editorDecorationId, this._decorationProvider.getDecorationOption(newCollapseState));
|
||||
}
|
||||
}
|
||||
@@ -60,7 +63,7 @@ export class FoldingModel {
|
||||
this._updateEventEmitter.fire({ model: this, collapseStateChanged: regions });
|
||||
}
|
||||
|
||||
public update(newRanges: FoldingRanges, blockedLineNumers: number[] = []): void {
|
||||
public update(newRegions: FoldingRegions, blockedLineNumers: number[] = []): void {
|
||||
let newEditorDecorations = [];
|
||||
|
||||
let isBlocked = (startLineNumber, endLineNumber) => {
|
||||
@@ -73,11 +76,11 @@ export class FoldingModel {
|
||||
};
|
||||
|
||||
let initRange = (index: number, isCollapsed: boolean) => {
|
||||
let startLineNumber = newRanges.getStartLineNumber(index);
|
||||
if (isCollapsed && isBlocked(startLineNumber, newRanges.getEndLineNumber(index))) {
|
||||
let startLineNumber = newRegions.getStartLineNumber(index);
|
||||
if (isCollapsed && isBlocked(startLineNumber, newRegions.getEndLineNumber(index))) {
|
||||
isCollapsed = false;
|
||||
}
|
||||
newRanges.setCollapsed(index, isCollapsed);
|
||||
newRegions.setCollapsed(index, isCollapsed);
|
||||
let maxColumn = this._textModel.getLineMaxColumn(startLineNumber);
|
||||
let decorationRange = {
|
||||
startLineNumber: startLineNumber,
|
||||
@@ -90,8 +93,8 @@ export class FoldingModel {
|
||||
|
||||
let i = 0;
|
||||
let nextCollapsed = () => {
|
||||
while (i < this._ranges.length) {
|
||||
let isCollapsed = this._ranges.isCollapsed(i);
|
||||
while (i < this._regions.length) {
|
||||
let isCollapsed = this._regions.isCollapsed(i);
|
||||
i++;
|
||||
if (isCollapsed) {
|
||||
return i - 1;
|
||||
@@ -102,14 +105,14 @@ export class FoldingModel {
|
||||
|
||||
let k = 0;
|
||||
let collapsedIndex = nextCollapsed();
|
||||
while (collapsedIndex !== -1 && k < newRanges.length) {
|
||||
while (collapsedIndex !== -1 && k < newRegions.length) {
|
||||
// get the latest range
|
||||
let decRange = this._textModel.getDecorationRange(this._editorDecorationIds[collapsedIndex]);
|
||||
if (decRange) {
|
||||
let collapsedStartLineNumber = decRange.startLineNumber;
|
||||
if (this._textModel.getLineMaxColumn(collapsedStartLineNumber) === decRange.startColumn) { // test that the decoration is still at the end otherwise it got deleted
|
||||
while (k < newRanges.length) {
|
||||
let startLineNumber = newRanges.getStartLineNumber(k);
|
||||
while (k < newRegions.length) {
|
||||
let startLineNumber = newRegions.getStartLineNumber(k);
|
||||
if (collapsedStartLineNumber >= startLineNumber) {
|
||||
initRange(k, collapsedStartLineNumber === startLineNumber);
|
||||
k++;
|
||||
@@ -121,13 +124,14 @@ export class FoldingModel {
|
||||
}
|
||||
collapsedIndex = nextCollapsed();
|
||||
}
|
||||
while (k < newRanges.length) {
|
||||
while (k < newRegions.length) {
|
||||
initRange(k, false);
|
||||
k++;
|
||||
}
|
||||
|
||||
this._editorDecorationIds = this._decorationProvider.deltaDecorations(this._editorDecorationIds, newEditorDecorations);
|
||||
this._ranges = newRanges;
|
||||
this._regions = newRegions;
|
||||
this._isInitialized = true;
|
||||
this._updateEventEmitter.fire({ model: this });
|
||||
}
|
||||
|
||||
@@ -136,12 +140,12 @@ export class FoldingModel {
|
||||
*/
|
||||
public getMemento(): CollapseMemento {
|
||||
let collapsedRanges: ILineRange[] = [];
|
||||
for (let i = 0; i < this._ranges.length; i++) {
|
||||
if (this._ranges.isCollapsed(i)) {
|
||||
for (let i = 0; i < this._regions.length; i++) {
|
||||
if (this._regions.isCollapsed(i)) {
|
||||
let range = this._textModel.getDecorationRange(this._editorDecorationIds[i]);
|
||||
if (range) {
|
||||
let startLineNumber = range.startLineNumber;
|
||||
let endLineNumber = range.endLineNumber + this._ranges.getEndLineNumber(i) - this._ranges.getStartLineNumber(i);
|
||||
let endLineNumber = range.endLineNumber + this._regions.getEndLineNumber(i) - this._regions.getStartLineNumber(i);
|
||||
collapsedRanges.push({ startLineNumber, endLineNumber });
|
||||
}
|
||||
}
|
||||
@@ -175,11 +179,11 @@ export class FoldingModel {
|
||||
|
||||
getAllRegionsAtLine(lineNumber: number, filter?: (r: FoldingRegion, level: number) => boolean): FoldingRegion[] {
|
||||
let result: FoldingRegion[] = [];
|
||||
if (this._ranges) {
|
||||
let index = this._ranges.findRange(lineNumber);
|
||||
if (this._regions) {
|
||||
let index = this._regions.findRange(lineNumber);
|
||||
let level = 1;
|
||||
while (index >= 0) {
|
||||
let current = this._ranges.toRegion(index);
|
||||
let current = this._regions.toRegion(index);
|
||||
if (!filter || filter(current, level)) {
|
||||
result.push(current);
|
||||
}
|
||||
@@ -191,10 +195,10 @@ export class FoldingModel {
|
||||
}
|
||||
|
||||
getRegionAtLine(lineNumber: number): FoldingRegion {
|
||||
if (this._ranges) {
|
||||
let index = this._ranges.findRange(lineNumber);
|
||||
if (this._regions) {
|
||||
let index = this._regions.findRange(lineNumber);
|
||||
if (index >= 0) {
|
||||
return this._ranges.toRegion(index);
|
||||
return this._regions.toRegion(index);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
@@ -206,9 +210,9 @@ export class FoldingModel {
|
||||
let levelStack: FoldingRegion[] = trackLevel ? [] : null;
|
||||
let index = region ? region.regionIndex + 1 : 0;
|
||||
let endLineNumber = region ? region.endLineNumber : Number.MAX_VALUE;
|
||||
for (let i = index, len = this._ranges.length; i < len; i++) {
|
||||
let current = this._ranges.toRegion(i);
|
||||
if (this._ranges.getStartLineNumber(i) < endLineNumber) {
|
||||
for (let i = index, len = this._regions.length; i < len; i++) {
|
||||
let current = this._regions.toRegion(i);
|
||||
if (this._regions.getStartLineNumber(i) < endLineNumber) {
|
||||
if (trackLevel) {
|
||||
while (levelStack.length > 0 && !current.containedBy(levelStack[levelStack.length - 1])) {
|
||||
levelStack.pop();
|
||||
@@ -292,15 +296,30 @@ export function setCollapseStateAtLevel(foldingModel: FoldingModel, foldLevel: n
|
||||
*/
|
||||
export function setCollapseStateForMatchingLines(foldingModel: FoldingModel, regExp: RegExp, doCollapse: boolean): void {
|
||||
let editorModel = foldingModel.textModel;
|
||||
let ranges = foldingModel.ranges;
|
||||
let regions = foldingModel.regions;
|
||||
let toToggle = [];
|
||||
for (let i = ranges.length - 1; i >= 0; i--) {
|
||||
if (doCollapse !== ranges.isCollapsed(i)) {
|
||||
let startLineNumber = ranges.getStartLineNumber(i);
|
||||
for (let i = regions.length - 1; i >= 0; i--) {
|
||||
if (doCollapse !== regions.isCollapsed(i)) {
|
||||
let startLineNumber = regions.getStartLineNumber(i);
|
||||
if (regExp.test(editorModel.getLineContent(startLineNumber))) {
|
||||
toToggle.push(ranges.toRegion(i));
|
||||
toToggle.push(regions.toRegion(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
foldingModel.toggleCollapseState(toToggle);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Folds all regions of the given type
|
||||
* @param foldingModel the folding model
|
||||
*/
|
||||
export function setCollapseStateForType(foldingModel: FoldingModel, type: string, doCollapse: boolean): void {
|
||||
let regions = foldingModel.regions;
|
||||
let toToggle = [];
|
||||
for (let i = regions.length - 1; i >= 0; i--) {
|
||||
if (doCollapse !== regions.isCollapsed(i) && type === regions.getType(i)) {
|
||||
toToggle.push(regions.toRegion(i));
|
||||
}
|
||||
}
|
||||
foldingModel.toggleCollapseState(toToggle);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user