@@ -10,6 +10,7 @@ import { WordCharacterClass, WordCharacterClassifier, getMapForWordSeparators }
1010import { Position } from 'vs/editor/common/core/position' ;
1111import { Range } from 'vs/editor/common/core/range' ;
1212import { Selection } from 'vs/editor/common/core/selection' ;
13+ import { ITextModel , IWordAtPosition } from 'vs/editor/common/model' ;
1314
1415interface IFindWordResult {
1516 /**
@@ -535,6 +536,28 @@ export class WordOperations {
535536 return new Range ( pos . lineNumber , pos . column , toPosition . lineNumber , toPosition . column ) ;
536537 }
537538
539+ private static _createWordAtPosition ( model : ITextModel , lineNumber : number , word : IFindWordResult ) : IWordAtPosition {
540+ const range = new Range ( lineNumber , word . start + 1 , lineNumber , word . end + 1 ) ;
541+ return {
542+ word : model . getValueInRange ( range ) ,
543+ startColumn : range . startColumn ,
544+ endColumn : range . endColumn
545+ } ;
546+ }
547+
548+ public static getWordAtPosition ( model : ITextModel , _wordSeparators : string , position : Position ) : IWordAtPosition | null {
549+ const wordSeparators = getMapForWordSeparators ( _wordSeparators ) ;
550+ const prevWord = WordOperations . _findPreviousWordOnLine ( wordSeparators , model , position ) ;
551+ if ( prevWord && prevWord . wordType === WordType . Regular && prevWord . start <= position . column - 1 && position . column - 1 <= prevWord . end ) {
552+ return WordOperations . _createWordAtPosition ( model , position . lineNumber , prevWord ) ;
553+ }
554+ const nextWord = WordOperations . _findNextWordOnLine ( wordSeparators , model , position ) ;
555+ if ( nextWord && nextWord . wordType === WordType . Regular && nextWord . start <= position . column - 1 && position . column - 1 <= nextWord . end ) {
556+ return WordOperations . _createWordAtPosition ( model , position . lineNumber , nextWord ) ;
557+ }
558+ return null ;
559+ }
560+
538561 public static word ( config : CursorConfiguration , model : ICursorSimpleModel , cursor : SingleCursorState , inSelectionMode : boolean , position : Position ) : SingleCursorState {
539562 const wordSeparators = getMapForWordSeparators ( config . wordSeparators ) ;
540563 let prevWord = WordOperations . _findPreviousWordOnLine ( wordSeparators , model , position ) ;
0 commit comments