anchor.diff:      // Adjusts the token tag for the given identifier
       // - if we're inside active pattern name (at the bar), correct the token TAG to be an identifier
       let CorrectIdentifierToken (s:string) tokenTag = 
  -        if (s.EndsWith("|")) then (Microsoft.FSharp.Compiler.Parser.tagOfToken (Microsoft.FSharp.Compiler.Parser.token.IDENT s)) 
  +        if s.EndsWith "|" then Microsoft.FSharp.Compiler.Parser.tagOfToken (Microsoft.FSharp.Compiler.Parser.token.IDENT s)
           else tokenTag
   
       let rec isValidStrippedName (name:string) idx = 
  -        if (idx = name.Length) then false
  -        elif (IsIdentifierPartCharacter name.[idx]) then true
  +        if idx = name.Length then false
  +        elif IsIdentifierPartCharacter name.[idx] then true
           else isValidStrippedName name (idx + 1)
   
       // Utility function that recognizes whether a name is valid active pattern name
  
positive.code: 
      /// Get the partial long name of the identifier to the left of index.
      let GetPartialLongNameEx(line:string,index) : (string list * string) =
          if isNull line then ([],"")
          elif index<0 then ([],"")
          elif index>=line.Length then ([],"")
          else
              let IsIdentifierPartCharacter(pos) = IsIdentifierPartCharacter(line.[pos])
              let IsIdentifierStartCharacter(pos) = IsIdentifierPartCharacter(pos)
              let IsDot(pos) = line.[pos]='.'
              let IsTick(pos) = line.[pos]='`'
              let IsEndOfComment(pos) = pos < index - 1 && line.[pos] = '*' && line.[pos + 1] = ')'
              let IsStartOfComment(pos) = pos < index - 1 && line.[pos] = '(' && line.[pos + 1] = '*'
              let IsWhitespace(pos) = Char.IsWhiteSpace(line.[pos])
  
              let rec SkipWhitespaceBeforeDotIdentifier(pos, ident, current,throwAwayNext) =
                  if pos > index then [],""  // we're in whitespace after an identifier, if this is where the cursor is, there is no PLID here
                  elif IsWhitespace(pos) then SkipWhitespaceBeforeDotIdentifier(pos+1,ident,current,throwAwayNext)
                  elif IsDot(pos) then AtStartOfIdentifier(pos+1,ident::current,throwAwayNext)
                  elif IsStartOfComment pos then EatComment(1, pos + 1, EatCommentCallContext.SkipWhiteSpaces(ident, current, throwAwayNext))
                  else AtStartOfIdentifier(pos,[],false) // Throw away what we have and start over.
  
              and EatComment (nesting, pos, callContext) = 
                  if pos > index then [], ""
                  else
                  if IsStartOfComment(pos) then
                      // track balance of closing '*)'
                      EatComment(nesting + 1, pos + 2, callContext)
                  else
                  if IsEndOfComment(pos) then
                      if nesting = 1 then 
                          // all right, we are at the end of comment, jump outside
                          match callContext with
  
negative.code:             else 
                  directResult
  
      let private defaultName = [],""
  
      /// Get the partial long name of the identifier to the left of index.
      let GetPartialLongName(line:string,index) =
          if isNull line then defaultName
          elif index < 0 then defaultName
          elif index >= line.Length then defaultName
          else
              let IsIdentifierPartCharacter pos = IsIdentifierPartCharacter line.[pos]
              let IsLongIdentifierPartCharacter pos = IsLongIdentifierPartCharacter line.[pos]
  