tree-sitter-elixir/test/corpus/integration/spec.txt

252 lines
5.2 KiB
Plaintext

=====================================
without type parentheses
=====================================
@spec fun(atom, integer, keyword) :: string
---
(source
(unary_operator
(call
(identifier)
(arguments
(binary_operator
(call
(identifier)
(arguments
(identifier)
(identifier)
(identifier)))
(identifier))))))
=====================================
with type parentheses
=====================================
@spec fun(atom(), integer(), keyword()) :: string()
---
(source
(unary_operator
(call
(identifier)
(arguments
(binary_operator
(call
(identifier)
(arguments
(call
(identifier)
(arguments))
(call
(identifier)
(arguments))
(call
(identifier)
(arguments))))
(call
(identifier)
(arguments)))))))
=====================================
with literals
=====================================
@spec fun(%{key: atom}) :: {:ok, atom} | {:error, binary}
---
(source
(unary_operator
(call
(identifier)
(arguments
(binary_operator
(call
(identifier)
(arguments
(map
(map_content
(keywords
(pair
(keyword
(atom_literal))
(identifier)))))))
(binary_operator
(tuple
(atom
(atom_literal))
(identifier))
(tuple
(atom
(atom_literal))
(identifier))))))))
=====================================
with function reference
=====================================
@spec fun((-> atom), (atom -> integer)) :: integer
---
(source
(unary_operator
(call
(identifier)
(arguments
(binary_operator
(call
(identifier)
(arguments
(block
(stab_clause
(body
(identifier))))
(block
(stab_clause
(arguments
(identifier))
(body
(identifier))))))
(identifier))))))
=====================================
with remote type
=====================================
@spec fun(Keyword.t()) :: String.t()
---
(source
(unary_operator
(call
(identifier)
(arguments
(binary_operator
(call
(identifier)
(arguments
(call
(dot
(alias)
(identifier))
(arguments))))
(call
(dot
(alias)
(identifier))
(arguments)))))))
=====================================
with type guard
=====================================
@spec fun(arg1, arg2) :: {arg1, arg2} when arg1: atom, arg2: integer
---
(source
(unary_operator
(call
(identifier)
(arguments
(binary_operator
(binary_operator
(call
(identifier)
(arguments
(identifier)
(identifier)))
(tuple
(identifier)
(identifier)))
(keywords
(pair
(keyword
(atom_literal))
(identifier))
(pair
(keyword
(atom_literal))
(identifier))))))))
=====================================
with named arguments
=====================================
@spec days_since_epoch(year :: integer, month :: integer, day :: integer) :: integer
---
(source
(unary_operator
(call
(identifier)
(arguments
(binary_operator
(call
(identifier)
(arguments
(binary_operator
(identifier)
(identifier))
(binary_operator
(identifier)
(identifier))
(binary_operator
(identifier)
(identifier))))
(identifier))))))
=====================================
nonempty list
=====================================
@spec fun() :: [integer, ...]
---
(source
(unary_operator
(call
(identifier)
(arguments
(binary_operator
(call
(identifier)
(arguments))
(list
(identifier)
(identifier)))))))
=====================================
[error] type guard cannot end with keyword separator
=====================================
@spec fun(arg) :: arg when arg: atom,
---
(source
(unary_operator
(call
(identifier)
(arguments
(binary_operator
(binary_operator
(call
(identifier)
(arguments
(identifier)))
(identifier))
(keywords
(pair
(keyword
(atom_literal))
(identifier)))))))
(ERROR))