From f6097950652cb01ccfd2d896b87c2b63d8d89934 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Tue, 28 Jun 2016 01:39:35 +0200 Subject: [PATCH] Funnel getLineIndentGuide to viewLineParts --- .../browser/viewParts/lines/viewLine.ts | 2 +- .../editor/browser/widget/diffEditorWidget.ts | 4 +-- .../editor/common/viewLayout/viewLineParts.ts | 6 ++-- .../common/viewModel/splitLinesCollection.ts | 7 +++++ src/vs/editor/common/viewModel/viewModel.ts | 1 + .../editor/common/viewModel/viewModelImpl.ts | 5 ++++ .../common/viewLayout/viewLineParts.test.ts | 30 +++++++++---------- 7 files changed, 34 insertions(+), 21 deletions(-) diff --git a/src/vs/editor/browser/viewParts/lines/viewLine.ts b/src/vs/editor/browser/viewParts/lines/viewLine.ts index 75959d26eb2..7948fa974bf 100644 --- a/src/vs/editor/browser/viewParts/lines/viewLine.ts +++ b/src/vs/editor/browser/viewParts/lines/viewLine.ts @@ -119,7 +119,7 @@ export class ViewLine implements IVisibleLineData { this._context.model.getLineTokens(lineNumber), inlineDecorations, this._renderWhitespace, - this._indentGuides + this._indentGuides ? this._context.model.getLineIndentGuide(lineNumber) : 0 ); } diff --git a/src/vs/editor/browser/widget/diffEditorWidget.ts b/src/vs/editor/browser/widget/diffEditorWidget.ts index 4280136cb1b..48971ab6d86 100644 --- a/src/vs/editor/browser/widget/diffEditorWidget.ts +++ b/src/vs/editor/browser/widget/diffEditorWidget.ts @@ -1836,8 +1836,8 @@ class InlineViewZonesComputer extends ViewZonesComputer { let lineContent = originalModel.getLineContent(lineNumber); let lineTokens = new ViewLineTokens([new ViewLineToken(0, '')], 0, lineContent.length); - - let parts = createLineParts(lineNumber, 1, lineContent, tabSize, lineTokens, decorations, config.viewInfo.renderWhitespace, config.viewInfo.indentGuides); + let indentGuides = config.viewInfo.indentGuides ? originalModel.getLineIndentGuide(lineNumber) : 0; + let parts = createLineParts(lineNumber, 1, lineContent, tabSize, lineTokens, decorations, config.viewInfo.renderWhitespace, indentGuides); let r = renderLine(new RenderLineInput( lineContent, diff --git a/src/vs/editor/common/viewLayout/viewLineParts.ts b/src/vs/editor/common/viewLayout/viewLineParts.ts index 5188aba569a..4fa154e7058 100644 --- a/src/vs/editor/common/viewLayout/viewLineParts.ts +++ b/src/vs/editor/common/viewLayout/viewLineParts.ts @@ -14,7 +14,7 @@ function cmpLineDecorations(a:InlineDecoration, b:InlineDecoration): number { return Range.compareRangesUsingStarts(a.range, b.range); } -export function createLineParts(lineNumber:number, minLineColumn:number, lineContent:string, tabSize:number, lineTokens:ViewLineTokens, rawLineDecorations:InlineDecoration[], renderWhitespace:boolean, indentGuides:boolean): LineParts { +export function createLineParts(lineNumber:number, minLineColumn:number, lineContent:string, tabSize:number, lineTokens:ViewLineTokens, rawLineDecorations:InlineDecoration[], renderWhitespace:boolean, indentGuides:number): LineParts { if (indentGuides || renderWhitespace) { let oldLength = rawLineDecorations.length; rawLineDecorations = insertCustomLineDecorations(indentGuides, renderWhitespace, lineNumber, lineContent, tabSize, lineTokens.getFauxIndentLength(), rawLineDecorations); @@ -100,8 +100,8 @@ function insertOneCustomLineDecoration(dest:InlineDecoration[], lineNumber:numbe dest.push(new InlineDecoration(new Range(lineNumber, startColumn, lineNumber, endColumn), className)); } -function insertCustomLineDecorations(indentGuides:boolean, renderWhitespace:boolean, lineNumber:number, lineContent: string, tabSize:number, fauxIndentLength: number, rawLineDecorations: InlineDecoration[]): InlineDecoration[] { - if (!indentGuides && !renderWhitespace) { +function insertCustomLineDecorations(indentGuides:number, renderWhitespace:boolean, lineNumber:number, lineContent: string, tabSize:number, fauxIndentLength: number, rawLineDecorations: InlineDecoration[]): InlineDecoration[] { + if (indentGuides === 0 && !renderWhitespace) { return rawLineDecorations; } diff --git a/src/vs/editor/common/viewModel/splitLinesCollection.ts b/src/vs/editor/common/viewModel/splitLinesCollection.ts index 956a86ccbab..19d3d615a70 100644 --- a/src/vs/editor/common/viewModel/splitLinesCollection.ts +++ b/src/vs/editor/common/viewModel/splitLinesCollection.ts @@ -633,6 +633,13 @@ export class SplitLinesCollection implements ILinesCollection { return this.lines[lineIndex].getOutputLineContent(this.model, lineIndex + 1, remainder); } + public getOutputIndentGuide(outputLineNumber:number): number { + this._ensureValidState(); + outputLineNumber = this._toValidOutputLineNumber(outputLineNumber); + let r = this.prefixSumComputer.getIndexOf(outputLineNumber - 1); + return this.model.getLineIndentGuide(r.index + 1); + } + public getOutputLineMinColumn(outputLineNumber:number): number { this._ensureValidState(); outputLineNumber = this._toValidOutputLineNumber(outputLineNumber); diff --git a/src/vs/editor/common/viewModel/viewModel.ts b/src/vs/editor/common/viewModel/viewModel.ts index e6392681093..d73580aa3c6 100644 --- a/src/vs/editor/common/viewModel/viewModel.ts +++ b/src/vs/editor/common/viewModel/viewModel.ts @@ -25,6 +25,7 @@ export interface IViewModel extends IEventEmitter { getLineCount(): number; getLineContent(lineNumber:number): string; + getLineIndentGuide(lineNumber:number): number; getLineMinColumn(lineNumber:number): number; getLineMaxColumn(lineNumber:number): number; getLineFirstNonWhitespaceColumn(lineNumber:number): number; diff --git a/src/vs/editor/common/viewModel/viewModelImpl.ts b/src/vs/editor/common/viewModel/viewModelImpl.ts index 77b1de638f8..86ec99104e5 100644 --- a/src/vs/editor/common/viewModel/viewModelImpl.ts +++ b/src/vs/editor/common/viewModel/viewModelImpl.ts @@ -27,6 +27,7 @@ export interface ILinesCollection { onModelLineChanged(versionId:number, lineNumber:number, newText:string, emit:(evenType:string, payload:any)=>void): boolean; getOutputLineCount(): number; getOutputLineContent(outputLineNumber:number): string; + getOutputIndentGuide(outputLineNumber:number): number; getOutputLineMinColumn(outputLineNumber:number): number; getOutputLineMaxColumn(outputLineNumber:number): number; getOutputLineTokens(outputLineNumber:number): ViewLineTokens; @@ -381,6 +382,10 @@ export class ViewModel extends EventEmitter implements IViewModel { return this.lines.getOutputLineContent(lineNumber); } + public getLineIndentGuide(lineNumber:number): number { + return this.lines.getOutputIndentGuide(lineNumber); + } + public getLineMinColumn(lineNumber:number): number { return this.lines.getOutputLineMinColumn(lineNumber); } diff --git a/src/vs/editor/test/common/viewLayout/viewLineParts.test.ts b/src/vs/editor/test/common/viewLayout/viewLineParts.test.ts index 46f4afb368a..c5c6ecc41c8 100644 --- a/src/vs/editor/test/common/viewLayout/viewLineParts.test.ts +++ b/src/vs/editor/test/common/viewLayout/viewLineParts.test.ts @@ -55,7 +55,7 @@ suite('Editor ViewLayout - ViewLineParts', () => { ]); }); - function testCreateLineParts(lineContent: string, tokens: ViewLineToken[], fauxIndentLength: number, renderWhitespace:boolean, indentGuides:boolean, expected:ViewLineToken[]): void { + function testCreateLineParts(lineContent: string, tokens: ViewLineToken[], fauxIndentLength: number, renderWhitespace:boolean, indentGuides:number, expected:ViewLineToken[]): void { let lineParts = createLineParts(1, 1, lineContent, 4, new ViewLineTokens(tokens, fauxIndentLength, lineContent.length), [], renderWhitespace, indentGuides); let actual = lineParts.getParts(); @@ -70,7 +70,7 @@ suite('Editor ViewLayout - ViewLineParts', () => { ], 0, false, - false, + 0, [ new ViewLineToken(0, '') ] @@ -85,7 +85,7 @@ suite('Editor ViewLayout - ViewLineParts', () => { ], 0, false, - false, + 0, [ new ViewLineToken(0, 'a'), new ViewLineToken(6, 'b') @@ -102,7 +102,7 @@ suite('Editor ViewLayout - ViewLineParts', () => { ], 0, true, - false, + 0, [ new ViewLineToken(0, ' leading whitespace'), new ViewLineToken(4, 'a'), @@ -121,7 +121,7 @@ suite('Editor ViewLayout - ViewLineParts', () => { ], 0, true, - false, + 0, [ new ViewLineToken(0, ' leading whitespace'), new ViewLineToken(4, ' leading whitespace'), @@ -142,7 +142,7 @@ suite('Editor ViewLayout - ViewLineParts', () => { ], 0, true, - false, + 0, [ new ViewLineToken(0, ' leading whitespace'), new ViewLineToken(1, ' leading whitespace'), @@ -162,7 +162,7 @@ suite('Editor ViewLayout - ViewLineParts', () => { ], 0, true, - false, + 0, [ new ViewLineToken(0, ' leading whitespace'), new ViewLineToken(3, ' leading whitespace'), @@ -186,7 +186,7 @@ suite('Editor ViewLayout - ViewLineParts', () => { ], 0, false, - true, + 1, [ new ViewLineToken(0, ' indent-guide'), new ViewLineToken(4, 'a'), @@ -204,7 +204,7 @@ suite('Editor ViewLayout - ViewLineParts', () => { ], 0, false, - true, + 2, [ new ViewLineToken(0, ' indent-guide'), new ViewLineToken(4, ' indent-guide'), @@ -223,7 +223,7 @@ suite('Editor ViewLayout - ViewLineParts', () => { ], 0, false, - true, + 2, [ new ViewLineToken(0, ' indent-guide'), new ViewLineToken(1, ' indent-guide'), @@ -242,7 +242,7 @@ suite('Editor ViewLayout - ViewLineParts', () => { ], 0, false, - true, + 2, [ new ViewLineToken(0, ' indent-guide'), new ViewLineToken(3, ' indent-guide'), @@ -263,7 +263,7 @@ suite('Editor ViewLayout - ViewLineParts', () => { ], 0, true, - true, + 2, [ new ViewLineToken(0, ' leading whitespace indent-guide'), new ViewLineToken(3, ' leading whitespace indent-guide'), @@ -288,7 +288,7 @@ suite('Editor ViewLayout - ViewLineParts', () => { ], 2, true, - false, + 0, [ new ViewLineToken(0, ''), new ViewLineToken(2, ' leading whitespace'), @@ -312,7 +312,7 @@ suite('Editor ViewLayout - ViewLineParts', () => { ], 2, false, - true, + 2, [ new ViewLineToken(0, ' indent-guide'), new ViewLineToken(1, ' indent-guide'), @@ -333,7 +333,7 @@ suite('Editor ViewLayout - ViewLineParts', () => { ], 2, true, - true, + 2, [ new ViewLineToken(0, ' indent-guide'), new ViewLineToken(1, ' indent-guide'),