anchor.diff:    | UpdateAndGetTypedInfo of ParseRequest * AsyncReplyChannel<TypedParseResult>
     | GetTypedInfoDone of AsyncReplyChannel<TypedParseResult>
   
  +type SymbolKind =
  +    | Ident
  +    | Operator
  +    | GenericTypeParameter
  +    | StaticallyResolvedTypeParameter
  +    | Other
  +
   type Symbol =
  -    { Line: int
  +    { Kind: SymbolKind
  +      Line: int
         LeftColumn: int
         RightColumn: int
         Text: string }
       member x.Range = x.Line, x.LeftColumn, x.Line, x.RightColumn
  +
  +type DraftToken =
  +    { Kind: SymbolKind
  +      Token: TokenInformation 
  +      RightColumn: int }
  +    static member Create kind token = 
  +        { Kind = kind; Token = token; RightColumn = token.LeftColumn + token.FullMatchedLength - 1 }
  +    member x.IsOperator = match x.Kind with Operator -> true | _ -> false
   
   /// Provides functionality for working with the F# interactive checker running in background
   type LanguageService(dirtyNotify) =
  
positive.code:             | _ -> List.rev acc
          loop (queryLexState source defines line) []
  
        let getCorrectRightCol (token: TokenInformation) = token.LeftColumn + token.FullMatchedLength
        let isIdentifier t = t.CharClass = TokenCharKind.Identifier
        let isOperator t = t.ColorClass = TokenColorKind.Operator
  
        // Operators: Filter out overlapped oparators (>>= operator is tokenized as three distinct tokens: GREATER, GREATER, EQUALS. 
        // Each of them has FullMatchedLength = 3. So, we take the first GREATER and skip the other two).
  
negative.code: 
    //let tap msg x = debug "[%s] %A" msg x; x
  
    // Returns symbol at a given position.
    let getSymbol source line col lineStr (args: string array): Symbol option =
        let defines =
  