Skip to content

Commit

Permalink
Move error lookup function
Browse files Browse the repository at this point in the history
  • Loading branch information
JosephTLyons committed Nov 4, 2024
1 parent 9e7ed24 commit 19f0b03
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 14 deletions.
16 changes: 2 additions & 14 deletions src/lenient_parse/internal/parse.gleam
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ pub fn parse_float(input: String) -> Result(String, ParseError) {
use #(_, tokens, index) <- result.try(post_whitespace_result)

case tokens |> list.first {
Ok(token) -> Error(extraneous_token_error(token, index))
Ok(token) -> Error(tokenizer.error_for_token(token, index))
_ -> {
case digit_pre_decimal, digit_post_decimal {
Some(pre), Some(post) -> Ok(sign <> pre <> "." <> post)
Expand Down Expand Up @@ -75,7 +75,7 @@ pub fn parse_int(input: String) -> Result(String, ParseError) {
use #(_, tokens, index) <- result.try(post_whitespace_result)

case tokens |> list.first {
Ok(token) -> Error(extraneous_token_error(token, index))
Ok(token) -> Error(tokenizer.error_for_token(token, index))
_ -> {
case leading_whitespace, digit {
Some(_), Some(digit) | None, Some(digit) -> Ok(sign <> digit)
Expand Down Expand Up @@ -191,15 +191,3 @@ fn parse_digit(
}
}
}

// TODO: Move this to some place that makes more sense
fn extraneous_token_error(token: Token, index) -> ParseError {
case token {
Digit(digit) -> InvalidDigitPosition(digit, index)
Sign(sign) -> InvalidSignPosition(sign, index)
Underscore -> InvalidUnderscorePosition(index)
Unknown(character) -> UnknownCharacter(character, index)
Whitespace(whitespace) -> UnknownCharacter(whitespace, index)
DecimalPoint -> InvalidDecimalPosition(index)
}
}
15 changes: 15 additions & 0 deletions src/lenient_parse/internal/tokenizer.gleam
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import gleam/list
import gleam/string
import parse_error.{
type ParseError, InvalidDecimalPosition, InvalidDigitPosition,
InvalidSignPosition, InvalidUnderscorePosition, UnknownCharacter,
}

pub type Token {
Sign(String)
Expand Down Expand Up @@ -32,3 +36,14 @@ fn do_tokenize(characters: List(String), acc: List(Token)) -> List(Token) {
}
}
}

pub fn error_for_token(token: Token, index) -> ParseError {
case token {
Digit(digit) -> InvalidDigitPosition(digit, index)
Sign(sign) -> InvalidSignPosition(sign, index)
Underscore -> InvalidUnderscorePosition(index)
Unknown(character) -> UnknownCharacter(character, index)
Whitespace(whitespace) -> UnknownCharacter(whitespace, index)
DecimalPoint -> InvalidDecimalPosition(index)
}
}

0 comments on commit 19f0b03

Please sign in to comment.