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

refine SelectionRangeKind #63935

上级 4dd31e92
......@@ -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' });
}
}
}
......
......@@ -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' });
}
}
......@@ -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;
......
......@@ -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;
......
......@@ -773,8 +773,8 @@ suite('ExtHostLanguageFeatureCommands', function () {
disposables.push(extHost.registerSelectionRangeProvider(nullExtensionDescription, defaultSelector, <vscode.SelectionRangeProvider>{
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))
];
}
}));
......
......@@ -1230,8 +1230,8 @@ suite('ExtHostLanguageFeatures', function () {
disposables.push(extHost.registerSelectionRangeProvider(defaultExtension, defaultSelector, <vscode.SelectionRangeProvider>{
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))
];
}
}));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册