Packages
caffeine_lang
6.2.2
6.3.1
6.3.0
6.2.2
6.2.1
6.2.0
6.1.2
6.1.1
6.1.0
6.0.0
5.6.0
5.5.0
5.4.4
5.4.3
5.4.2
5.4.1
5.4.0
5.3.0
5.2.0
5.1.1
5.1.0
5.0.12
5.0.11
5.0.10
5.0.8
5.0.7
5.0.6
5.0.5
5.0.4
5.0.1
5.0.0
4.10.0
4.9.0
4.8.3
4.8.2
4.8.1
4.8.0
4.7.9
4.7.8
4.7.7
4.7.6
4.7.5
4.6.7
4.6.6
4.6.5
4.6.4
4.6.3
4.6.2
4.6.0
4.5.1
4.5.0
4.4.4
4.4.3
4.4.1
4.4.0
4.3.7
4.3.6
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
1.0.2
1.0.1
0.1.0
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.2
0.0.1
A compiler for generating reliability artifacts from service expectation definitions.
Current section
Files
Jump to
Current section
Files
src/caffeine_lang/frontend/parser_error.gleam
import caffeine_lang/frontend/tokenizer_error
import gleam/int
/// Errors that can occur during parsing.
pub type ParserError {
TokenizerError(tokenizer_error.TokenizerError)
UnexpectedToken(expected: String, got: String, line: Int, column: Int)
UnexpectedEOF(expected: String, line: Int, column: Int)
UnknownType(name: String, line: Int, column: Int)
InvalidRefinement(message: String, line: Int, column: Int)
QuotedFieldName(name: String, line: Int, column: Int)
InvalidTypeAliasName(name: String, message: String, line: Int, column: Int)
}
/// Converts a parser error to a human-readable string.
@internal
pub fn to_string(err: ParserError) -> String {
case err {
TokenizerError(tok_err) -> tokenizer_error.to_string(tok_err)
UnexpectedToken(expected, got, line, column) ->
"Unexpected token at line "
<> int.to_string(line)
<> ", column "
<> int.to_string(column)
<> ": expected "
<> expected
<> ", got "
<> got
UnexpectedEOF(expected, line, column) ->
"Unexpected end of file at line "
<> int.to_string(line)
<> ", column "
<> int.to_string(column)
<> ": expected "
<> expected
UnknownType(name, line, column) ->
"Unknown type '"
<> name
<> "' at line "
<> int.to_string(line)
<> ", column "
<> int.to_string(column)
InvalidRefinement(message, line, column) ->
"Invalid refinement at line "
<> int.to_string(line)
<> ", column "
<> int.to_string(column)
<> ": "
<> message
QuotedFieldName(name, line, column) ->
"Quoted field name at line "
<> int.to_string(line)
<> ", column "
<> int.to_string(column)
<> ": field names should not be quoted. Use '"
<> name
<> "' instead of '\""
<> name
<> "\"'"
InvalidTypeAliasName(name, message, line, column) ->
"Invalid type alias name '"
<> name
<> "' at line "
<> int.to_string(line)
<> ", column "
<> int.to_string(column)
<> ": "
<> message
}
}
/// Extracts the line number from a parser error.
pub fn error_line(err: ParserError) -> Int {
case err {
TokenizerError(tok_err) ->
case tok_err {
tokenizer_error.UnterminatedString(line, _) -> line
tokenizer_error.InvalidCharacter(line, _, _) -> line
}
UnexpectedToken(_, _, line, _) -> line
UnexpectedEOF(_, line, _) -> line
UnknownType(_, line, _) -> line
InvalidRefinement(_, line, _) -> line
QuotedFieldName(_, line, _) -> line
InvalidTypeAliasName(_, _, line, _) -> line
}
}