anchor.diff:    ///   returnType? identifier
     /// ;
     /// ```
  -  Token parseTypedef(Token token) {
  -    Token typedefKeyword = token.next;
  +  Token parseTypedef(Token typedefKeyword) {
       assert(optional('typedef', typedefKeyword));
       listener.beginFunctionTypeAlias(typedefKeyword);
       TypeInfo typeInfo = computeType(typedefKeyword, false);
  -    token = typeInfo.skipType(typedefKeyword).next;
  +    Token token = typeInfo.skipType(typedefKeyword).next;
       Token equals;
       TypeParamOrArgInfo typeParam = computeTypeParamOrArg(token, true);
       if (typeInfo == noType &&
  
positive.code:   ///   'part' 'of' (qualified | uri) ';'
    /// ;
    /// ```
    Token parsePartOf(Token token) {
      Token partKeyword = token.next;
      Token ofKeyword = partKeyword.next;
      assert(optional('part', partKeyword));
      assert(optional('of', ofKeyword));
      listener.beginPartOf(partKeyword);
      bool hasName = ofKeyword.next.isIdentifier;
      if (hasName) {
        token = parseQualified(ofKeyword, IdentifierContext.partName,
            IdentifierContext.partNameContinuation);
  
negative.code:   ///   'library' qualified ';'
    /// ;
    /// ```
    Token parseLibraryName(Token libraryKeyword) {
      assert(optional('library', libraryKeyword));
      listener.beginLibraryName(libraryKeyword);
      Token token = parseQualified(libraryKeyword, IdentifierContext.libraryName,
          IdentifierContext.libraryNameContinuation);
      token = ensureSemicolon(token);
      listener.endLibraryName(libraryKeyword, token);
  