提交 27fd58c2 编写于 作者: J Johannes Rieken

refine SelectionRangeKind #63935

上级 4dd31e92
...@@ -108,8 +108,8 @@ export class BracketSelectionRangeProvider implements SelectionRangeProvider { ...@@ -108,8 +108,8 @@ export class BracketSelectionRangeProvider implements SelectionRangeProvider {
} }
const innerBracket = Range.fromPositions(bracket.range.getEndPosition(), closing!.getStartPosition()); const innerBracket = Range.fromPositions(bracket.range.getEndPosition(), closing!.getStartPosition());
const outerBracket = Range.fromPositions(bracket.range.getStartPosition(), closing!.getEndPosition()); const outerBracket = Range.fromPositions(bracket.range.getStartPosition(), closing!.getEndPosition());
bucket.push({ range: innerBracket, kind: 'block.bracket' }); bucket.push({ range: innerBracket, kind: 'statement.brackets' });
bucket.push({ range: outerBracket, kind: 'block.bracket' }); bucket.push({ range: outerBracket, kind: 'statement.brackets.full' });
BracketSelectionRangeProvider._addBracketLeading(model, outerBracket, bucket); BracketSelectionRangeProvider._addBracketLeading(model, outerBracket, bucket);
} }
} }
...@@ -128,8 +128,8 @@ export class BracketSelectionRangeProvider implements SelectionRangeProvider { ...@@ -128,8 +128,8 @@ export class BracketSelectionRangeProvider implements SelectionRangeProvider {
const startLine = bracket.startLineNumber; const startLine = bracket.startLineNumber;
const column = model.getLineFirstNonWhitespaceColumn(startLine); const column = model.getLineFirstNonWhitespaceColumn(startLine);
if (column !== 0 && column !== bracket.startColumn) { 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, column), bracket.getEndPosition()), kind: 'statement.brackets.leading' });
bucket.push({ range: Range.fromPositions(new Position(startLine, 1), bracket.getEndPosition()), kind: 'block.bracket.leading' }); bucket.push({ range: Range.fromPositions(new Position(startLine, 1), bracket.getEndPosition()), kind: 'statement.brackets.leading.full' });
} }
// xxxxxxxx // xxxxxxxx
...@@ -140,8 +140,8 @@ export class BracketSelectionRangeProvider implements SelectionRangeProvider { ...@@ -140,8 +140,8 @@ export class BracketSelectionRangeProvider implements SelectionRangeProvider {
if (aboveLine > 0) { if (aboveLine > 0) {
const column = model.getLineFirstNonWhitespaceColumn(aboveLine); const column = model.getLineFirstNonWhitespaceColumn(aboveLine);
if (column === bracket.startColumn && column !== model.getLineLastNonWhitespaceColumn(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, column), bracket.getEndPosition()), kind: 'statement.brackets.leading' });
bucket.push({ range: Range.fromPositions(new Position(aboveLine, 1), bracket.getEndPosition()), kind: 'block.bracket.leading' }); bucket.push({ range: Range.fromPositions(new Position(aboveLine, 1), bracket.getEndPosition()), kind: 'statement.brackets.leading.full' });
} }
} }
} }
......
...@@ -21,7 +21,7 @@ export class WordSelectionRangeProvider implements SelectionRangeProvider { ...@@ -21,7 +21,7 @@ export class WordSelectionRangeProvider implements SelectionRangeProvider {
private _addWordRanges(bucket: SelectionRange[], model: ITextModel, pos: Position): void { private _addWordRanges(bucket: SelectionRange[], model: ITextModel, pos: Position): void {
const word = model.getWordAtPosition(pos); const word = model.getWordAtPosition(pos);
if (word) { 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 { ...@@ -98,15 +98,15 @@ export class WordSelectionRangeProvider implements SelectionRangeProvider {
if (type === StandardTokenType.String) { if (type === StandardTokenType.String) {
// just assume that quotation marks are length=1 // 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.delta(0, 1), right.delta(0, -1)), kind: 'statement.string' });
bucket.push({ range: Range.fromPositions(left, right), kind: 'simple.string' }); bucket.push({ range: Range.fromPositions(left, right), kind: 'statement.string.full' });
} else { } 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 { 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.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: 'simple.line' }); bucket.push({ range: new Range(pos.lineNumber, model.getLineMinColumn(pos.lineNumber), pos.lineNumber, model.getLineMaxColumn(pos.lineNumber)), kind: 'statement.line.full' });
} }
} }
...@@ -20,10 +20,22 @@ declare module 'vscode' { ...@@ -20,10 +20,22 @@ declare module 'vscode' {
export class SelectionRangeKind { export class SelectionRangeKind {
/**
* Empty Kind.
*/
static readonly Empty: SelectionRangeKind; static readonly Empty: SelectionRangeKind;
/**
* The statment kind, its value is `statement`, possible extensions can be
* `statement.if` etc
*/
static readonly Statement: SelectionRangeKind; 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; readonly value: string;
......
...@@ -1042,8 +1042,7 @@ export class SelectionRangeKind { ...@@ -1042,8 +1042,7 @@ export class SelectionRangeKind {
static readonly Empty = new SelectionRangeKind(''); static readonly Empty = new SelectionRangeKind('');
static readonly Statement = SelectionRangeKind.Empty.append('statement'); static readonly Statement = SelectionRangeKind.Empty.append('statement');
static readonly Expression = SelectionRangeKind.Empty.append('expression'); static readonly Declaration = SelectionRangeKind.Empty.append('declaration');
static readonly Block = SelectionRangeKind.Empty.append('block');
readonly value: string; readonly value: string;
......
...@@ -773,8 +773,8 @@ suite('ExtHostLanguageFeatureCommands', function () { ...@@ -773,8 +773,8 @@ suite('ExtHostLanguageFeatureCommands', function () {
disposables.push(extHost.registerSelectionRangeProvider(nullExtensionDescription, defaultSelector, <vscode.SelectionRangeProvider>{ disposables.push(extHost.registerSelectionRangeProvider(nullExtensionDescription, defaultSelector, <vscode.SelectionRangeProvider>{
provideSelectionRanges() { provideSelectionRanges() {
return [ return [
new types.SelectionRange(types.SelectionRangeKind.Block, new types.Range(0, 10, 0, 18)), new types.SelectionRange(types.SelectionRangeKind.Empty, 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, 2, 0, 20))
]; ];
} }
})); }));
......
...@@ -1230,8 +1230,8 @@ suite('ExtHostLanguageFeatures', function () { ...@@ -1230,8 +1230,8 @@ suite('ExtHostLanguageFeatures', function () {
disposables.push(extHost.registerSelectionRangeProvider(defaultExtension, defaultSelector, <vscode.SelectionRangeProvider>{ disposables.push(extHost.registerSelectionRangeProvider(defaultExtension, defaultSelector, <vscode.SelectionRangeProvider>{
provideSelectionRanges() { provideSelectionRanges() {
return [ return [
new types.SelectionRange(types.SelectionRangeKind.Block, new types.Range(0, 10, 0, 18)), new types.SelectionRange(types.SelectionRangeKind.Empty, 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, 2, 0, 20))
]; ];
} }
})); }));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册