mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-15 18:46:36 -05:00
Merge from vscode 7eaf220cafb9d9e901370ffce02229171cbf3ea6
This commit is contained in:
committed by
Anthony Dresser
parent
39d9eed585
commit
a63578e6f7
@@ -14,7 +14,8 @@ export const enum RenderWhitespace {
|
||||
None = 0,
|
||||
Boundary = 1,
|
||||
Selection = 2,
|
||||
All = 3
|
||||
Trailing = 3,
|
||||
All = 4
|
||||
}
|
||||
|
||||
export const enum LinePartMetadata {
|
||||
@@ -113,7 +114,7 @@ export class RenderLineInput {
|
||||
middotWidth: number,
|
||||
wsmiddotWidth: number,
|
||||
stopRenderingLineAfter: number,
|
||||
renderWhitespace: 'none' | 'boundary' | 'selection' | 'all',
|
||||
renderWhitespace: 'none' | 'boundary' | 'selection' | 'trailing' | 'all',
|
||||
renderControlCharacters: boolean,
|
||||
fontLigatures: boolean,
|
||||
selectionsOnLine: LineRange[] | null
|
||||
@@ -138,7 +139,9 @@ export class RenderLineInput {
|
||||
? RenderWhitespace.Boundary
|
||||
: renderWhitespace === 'selection'
|
||||
? RenderWhitespace.Selection
|
||||
: RenderWhitespace.None
|
||||
: renderWhitespace === 'trailing'
|
||||
? RenderWhitespace.Trailing
|
||||
: RenderWhitespace.None
|
||||
);
|
||||
this.renderControlCharacters = renderControlCharacters;
|
||||
this.fontLigatures = fontLigatures;
|
||||
@@ -435,7 +438,11 @@ function resolveRenderLineInput(input: RenderLineInput): ResolvedRenderLineInput
|
||||
}
|
||||
|
||||
let tokens = transformAndRemoveOverflowing(input.lineTokens, input.fauxIndentLength, len);
|
||||
if (input.renderWhitespace === RenderWhitespace.All || input.renderWhitespace === RenderWhitespace.Boundary || (input.renderWhitespace === RenderWhitespace.Selection && !!input.selectionsOnLine)) {
|
||||
if (input.renderWhitespace === RenderWhitespace.All ||
|
||||
input.renderWhitespace === RenderWhitespace.Boundary ||
|
||||
(input.renderWhitespace === RenderWhitespace.Selection && !!input.selectionsOnLine) ||
|
||||
input.renderWhitespace === RenderWhitespace.Trailing) {
|
||||
|
||||
tokens = _applyRenderWhitespace(input, lineContent, len, tokens);
|
||||
}
|
||||
let containsForeignElements = ForeignElementType.None;
|
||||
@@ -592,6 +599,7 @@ function _applyRenderWhitespace(input: RenderLineInput, lineContent: string, len
|
||||
const useMonospaceOptimizations = input.useMonospaceOptimizations;
|
||||
const selections = input.selectionsOnLine;
|
||||
const onlyBoundary = (input.renderWhitespace === RenderWhitespace.Boundary);
|
||||
const onlyTrailing = (input.renderWhitespace === RenderWhitespace.Trailing);
|
||||
const generateLinePartForEachWhitespace = (input.renderSpaceWidth !== input.spaceWidth);
|
||||
|
||||
let result: LinePart[] = [], resultLen = 0;
|
||||
@@ -600,10 +608,11 @@ function _applyRenderWhitespace(input: RenderLineInput, lineContent: string, len
|
||||
let tokenEndIndex = tokens[tokenIndex].endIndex;
|
||||
const tokensLength = tokens.length;
|
||||
|
||||
let lineIsEmptyOrWhitespace = false;
|
||||
let firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);
|
||||
let lastNonWhitespaceIndex: number;
|
||||
if (firstNonWhitespaceIndex === -1) {
|
||||
// The entire line is whitespace
|
||||
lineIsEmptyOrWhitespace = true;
|
||||
firstNonWhitespaceIndex = len;
|
||||
lastNonWhitespaceIndex = len;
|
||||
} else {
|
||||
@@ -651,6 +660,11 @@ function _applyRenderWhitespace(input: RenderLineInput, lineContent: string, len
|
||||
isInWhitespace = !!currentSelection && currentSelection.startOffset <= charIndex && currentSelection.endOffset > charIndex;
|
||||
}
|
||||
|
||||
// If rendering only trailing whitespace, check that the charIndex points to trailing whitespace.
|
||||
if (isInWhitespace && onlyTrailing) {
|
||||
isInWhitespace = lineIsEmptyOrWhitespace || charIndex > lastNonWhitespaceIndex;
|
||||
}
|
||||
|
||||
if (wasInWhitespace) {
|
||||
// was in whitespace token
|
||||
if (!isInWhitespace || (!useMonospaceOptimizations && tmpIndent >= tabSize)) {
|
||||
|
||||
Reference in New Issue
Block a user