anchor.diff:      % has a bug that chokes on {Line, Col} locations in typed record
       % definitions
       TokensWithOnlyLineNumbers = flatten_token_locations(ProcessedTokens),
  -    {Forms, Errors}           = parse_tokens(TokensWithOnlyLineNumbers, FileName),
  +
  +    Version = otp_version(),
  +    {Forms, Errors}           = parse_tokens(TokensWithOnlyLineNumbers, FileName, Version),
       parse_has_errors(TokenInfo, Forms, Errors).
   
   
  
positive.code: -type form()         :: atom().
  -type position()     :: {non_neg_integer(), non_neg_integer()}.
  
  -type otp_version() :: 14|15|16|17.
  -spec(make_forms_by_version([syntaxTree()], otp_version()) ->syntaxTree()).
  -spec compile(binary() | [atom() | [any()] | char()]) -> {'error',atom() | {_,[any(),...]}}.
  -spec compile(binary() | [atom() | [any()] | char()],[any()]) -> {'error',atom() | {_,[any(),...]}}.
  
negative.code: -spec parse_text('undefined' | [atom() | [any()] | char()],binary(),_,_) -> {'error',{'undefined' | [any()],[any(),...]}} |
                                                                              {'error',[{_,_}]} |
                                                                              {'ok',[any()],_}.
  -spec parse_tokens([any()],'undefined' | [atom() | [any()] | char()], otp_version()) -> {[any()],[{_,_}]}.
  -spec parse_tokens([any()],[any()],[any()],[{_,{_,_,_}}],_, otp_version()) -> {[any()],[{_,_}]}.
  -spec scan_transform(binary()) -> syntaxTree().
  -spec scan_transform('eof' | binary() | string(),integer() | {integer(),pos_integer()}) -> {'error',{integer() | {_,_},atom() | tuple(),_}} | {'ok',[{_,_} | {_,_,_},...]}.
  -spec transform_char(special_char() |char()) -> 'error' | {'ok',[any()]}.
  