Skip to content

Commit

Permalink
add in word navigation for uppercase characters and underscores, #64004
Browse files Browse the repository at this point in the history
  • Loading branch information
jrieken committed Dec 18, 2018
1 parent b4ab23c commit d6359b2
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions src/vs/editor/contrib/smartSelect/wordSelections.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,45 @@ import { SelectionRangeProvider, SelectionRange } from 'vs/editor/common/modes';
import { ITextModel } from 'vs/editor/common/model';
import { Position } from 'vs/editor/common/core/position';
import { Range } from 'vs/editor/common/core/range';
import { CharCode } from 'vs/base/common/charCode';
import { isUpperAsciiLetter, isLowerAsciiLetter } from 'vs/base/common/strings';

export class WordSelectionRangeProvider implements SelectionRangeProvider {

provideSelectionRanges(model: ITextModel, position: Position): SelectionRange[] {
let result: SelectionRange[] = [];
this._addInWordRanges(result, model, position);
this._addWordRanges(result, model, position);
this._addLineRanges(result, model, position);
return result;
}

private _addInWordRanges(bucket: SelectionRange[], model: ITextModel, pos: Position): void {
const obj = model.getWordAtPosition(pos);
if (!obj) {
return;
}
let { word, startColumn } = obj;
let offset = pos.column - startColumn;
let lastCh: number = 0;
for (; offset < word.length; offset++) {
let ch = word.charCodeAt(offset);
if (isUpperAsciiLetter(ch) && isLowerAsciiLetter(lastCh)) {
// fooBar
// ^^^
// ^^^^^^
bucket.push({ range: new Range(pos.lineNumber, startColumn, pos.lineNumber, startColumn + offset), kind: 'statement.word.part' });
} else if (ch === CharCode.Underline && lastCh !== CharCode.Underline) {
// foo_bar
// ^^^
// ^^^^^^^
bucket.push({ range: new Range(pos.lineNumber, startColumn, pos.lineNumber, startColumn + offset), kind: 'statement.word.part' });
offset += 1;
}
lastCh = ch;
}
}

private _addWordRanges(bucket: SelectionRange[], model: ITextModel, pos: Position): void {
const word = model.getWordAtPosition(pos);
if (word) {
Expand Down

0 comments on commit d6359b2

Please sign in to comment.