From 27fd58c2068923cb1e97a6103141a990edb1ec93 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Tue, 18 Dec 2018 10:57:56 +0100 Subject: [PATCH] refine SelectionRangeKind #63935 --- .../contrib/smartSelect/bracketSelections.ts | 12 ++++++------ .../editor/contrib/smartSelect/wordSelections.ts | 12 ++++++------ src/vs/vscode.proposed.d.ts | 16 ++++++++++++++-- src/vs/workbench/api/node/extHostTypes.ts | 3 +-- .../api/extHostApiCommands.test.ts | 4 ++-- .../api/extHostLanguageFeatures.test.ts | 4 ++-- 6 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/vs/editor/contrib/smartSelect/bracketSelections.ts b/src/vs/editor/contrib/smartSelect/bracketSelections.ts index 66f31783c1f..909f0ca5d66 100644 --- a/src/vs/editor/contrib/smartSelect/bracketSelections.ts +++ b/src/vs/editor/contrib/smartSelect/bracketSelections.ts @@ -108,8 +108,8 @@ export class BracketSelectionRangeProvider implements SelectionRangeProvider { } const innerBracket = Range.fromPositions(bracket.range.getEndPosition(), closing!.getStartPosition()); const outerBracket = Range.fromPositions(bracket.range.getStartPosition(), closing!.getEndPosition()); - bucket.push({ range: innerBracket, kind: 'block.bracket' }); - bucket.push({ range: outerBracket, kind: 'block.bracket' }); + bucket.push({ range: innerBracket, kind: 'statement.brackets' }); + bucket.push({ range: outerBracket, kind: 'statement.brackets.full' }); BracketSelectionRangeProvider._addBracketLeading(model, outerBracket, bucket); } } @@ -128,8 +128,8 @@ export class BracketSelectionRangeProvider implements SelectionRangeProvider { const startLine = bracket.startLineNumber; const column = model.getLineFirstNonWhitespaceColumn(startLine); if (column !== 0 && column !== bracket.startColumn) { - bucket.push({ range: Range.fromPositions(new Position(startLine, column), bracket.getEndPosition()), kind: 'block.bracket.leading' }); - bucket.push({ range: Range.fromPositions(new Position(startLine, 1), bracket.getEndPosition()), kind: 'block.bracket.leading' }); + bucket.push({ range: Range.fromPositions(new Position(startLine, column), bracket.getEndPosition()), kind: 'statement.brackets.leading' }); + bucket.push({ range: Range.fromPositions(new Position(startLine, 1), bracket.getEndPosition()), kind: 'statement.brackets.leading.full' }); } // xxxxxxxx @@ -140,8 +140,8 @@ export class BracketSelectionRangeProvider implements SelectionRangeProvider { if (aboveLine > 0) { const column = model.getLineFirstNonWhitespaceColumn(aboveLine); if (column === bracket.startColumn && column !== model.getLineLastNonWhitespaceColumn(aboveLine)) { - bucket.push({ range: Range.fromPositions(new Position(aboveLine, column), bracket.getEndPosition()), kind: 'block.bracket.leading' }); - bucket.push({ range: Range.fromPositions(new Position(aboveLine, 1), bracket.getEndPosition()), kind: 'block.bracket.leading' }); + bucket.push({ range: Range.fromPositions(new Position(aboveLine, column), bracket.getEndPosition()), kind: 'statement.brackets.leading' }); + bucket.push({ range: Range.fromPositions(new Position(aboveLine, 1), bracket.getEndPosition()), kind: 'statement.brackets.leading.full' }); } } } diff --git a/src/vs/editor/contrib/smartSelect/wordSelections.ts b/src/vs/editor/contrib/smartSelect/wordSelections.ts index 378a5ed179a..d538496f617 100644 --- a/src/vs/editor/contrib/smartSelect/wordSelections.ts +++ b/src/vs/editor/contrib/smartSelect/wordSelections.ts @@ -21,7 +21,7 @@ export class WordSelectionRangeProvider implements SelectionRangeProvider { private _addWordRanges(bucket: SelectionRange[], model: ITextModel, pos: Position): void { const word = model.getWordAtPosition(pos); if (word) { - bucket.push({ range: new Range(pos.lineNumber, word.startColumn, pos.lineNumber, word.endColumn), kind: 'simple.word' }); + bucket.push({ range: new Range(pos.lineNumber, word.startColumn, pos.lineNumber, word.endColumn), kind: 'statement.word' }); } } @@ -98,15 +98,15 @@ export class WordSelectionRangeProvider implements SelectionRangeProvider { if (type === StandardTokenType.String) { // just assume that quotation marks are length=1 - bucket.push({ range: Range.fromPositions(left.delta(0, 1), right.delta(0, -1)), kind: 'simple.string' }); - bucket.push({ range: Range.fromPositions(left, right), kind: 'simple.string' }); + bucket.push({ range: Range.fromPositions(left.delta(0, 1), right.delta(0, -1)), kind: 'statement.string' }); + bucket.push({ range: Range.fromPositions(left, right), kind: 'statement.string.full' }); } else { - bucket.push({ range: Range.fromPositions(left, right), kind: 'simple.comment' }); + bucket.push({ range: Range.fromPositions(left, right), kind: 'statement.comment' }); } } private _addLineRanges(bucket: SelectionRange[], model: ITextModel, pos: Position): void { - bucket.push({ range: new Range(pos.lineNumber, model.getLineFirstNonWhitespaceColumn(pos.lineNumber), pos.lineNumber, model.getLineLastNonWhitespaceColumn(pos.lineNumber)), kind: 'simple.line' }); - bucket.push({ range: new Range(pos.lineNumber, model.getLineMinColumn(pos.lineNumber), pos.lineNumber, model.getLineMaxColumn(pos.lineNumber)), kind: 'simple.line' }); + bucket.push({ range: new Range(pos.lineNumber, model.getLineFirstNonWhitespaceColumn(pos.lineNumber), pos.lineNumber, model.getLineLastNonWhitespaceColumn(pos.lineNumber)), kind: 'statement.line' }); + bucket.push({ range: new Range(pos.lineNumber, model.getLineMinColumn(pos.lineNumber), pos.lineNumber, model.getLineMaxColumn(pos.lineNumber)), kind: 'statement.line.full' }); } } diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index 17c37f62720..79243d0bc2a 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -20,10 +20,22 @@ declare module 'vscode' { export class SelectionRangeKind { + /** + * Empty Kind. + */ static readonly Empty: SelectionRangeKind; + + /** + * The statment kind, its value is `statement`, possible extensions can be + * `statement.if` etc + */ static readonly Statement: SelectionRangeKind; - static readonly Expression: SelectionRangeKind; - static readonly Block: SelectionRangeKind; + + /** + * The declaration kind, its value is `declaration`, possible extensions can be + * `declaration.function`, `declaration.class` etc. + */ + static readonly Declaration: SelectionRangeKind; readonly value: string; diff --git a/src/vs/workbench/api/node/extHostTypes.ts b/src/vs/workbench/api/node/extHostTypes.ts index a90aabedb36..df05ef60d0d 100644 --- a/src/vs/workbench/api/node/extHostTypes.ts +++ b/src/vs/workbench/api/node/extHostTypes.ts @@ -1042,8 +1042,7 @@ export class SelectionRangeKind { static readonly Empty = new SelectionRangeKind(''); static readonly Statement = SelectionRangeKind.Empty.append('statement'); - static readonly Expression = SelectionRangeKind.Empty.append('expression'); - static readonly Block = SelectionRangeKind.Empty.append('block'); + static readonly Declaration = SelectionRangeKind.Empty.append('declaration'); readonly value: string; diff --git a/src/vs/workbench/test/electron-browser/api/extHostApiCommands.test.ts b/src/vs/workbench/test/electron-browser/api/extHostApiCommands.test.ts index f46faac2ee9..74183652039 100644 --- a/src/vs/workbench/test/electron-browser/api/extHostApiCommands.test.ts +++ b/src/vs/workbench/test/electron-browser/api/extHostApiCommands.test.ts @@ -773,8 +773,8 @@ suite('ExtHostLanguageFeatureCommands', function () { disposables.push(extHost.registerSelectionRangeProvider(nullExtensionDescription, defaultSelector, { provideSelectionRanges() { return [ - new types.SelectionRange(types.SelectionRangeKind.Block, new types.Range(0, 10, 0, 18)), - new types.SelectionRange(types.SelectionRangeKind.Block, new types.Range(0, 2, 0, 20)) + new types.SelectionRange(types.SelectionRangeKind.Empty, new types.Range(0, 10, 0, 18)), + new types.SelectionRange(types.SelectionRangeKind.Empty, new types.Range(0, 2, 0, 20)) ]; } })); diff --git a/src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts b/src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts index 966bc39e745..daad32a2850 100644 --- a/src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts +++ b/src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts @@ -1230,8 +1230,8 @@ suite('ExtHostLanguageFeatures', function () { disposables.push(extHost.registerSelectionRangeProvider(defaultExtension, defaultSelector, { provideSelectionRanges() { return [ - new types.SelectionRange(types.SelectionRangeKind.Block, new types.Range(0, 10, 0, 18)), - new types.SelectionRange(types.SelectionRangeKind.Block, new types.Range(0, 2, 0, 20)) + new types.SelectionRange(types.SelectionRangeKind.Empty, new types.Range(0, 10, 0, 18)), + new types.SelectionRange(types.SelectionRangeKind.Empty, new types.Range(0, 2, 0, 20)) ]; } })); -- GitLab