Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Number value literal lookahead restrictions - [GraphQL - October 2021] #685

Closed
sunli829 opened this issue Nov 2, 2021 · 0 comments
Closed
Labels
enhancement New feature or request

Comments

@sunli829
Copy link
Collaborator

sunli829 commented Nov 2, 2021

Description of the feature

Currently there are some language ambiguities and underspecification for lexing numbers which each implementation has handled slightly differently.

Because commas are optional and white space isn't required between tokens, these two snippets are equivalent: [123, abc], [123abc]. This may be confusing to read, but it should parse correctly. However the opposite is not true, since digits may belong in a Name, the following two are not equivalent: [abc, 123], [abc123]. This could lead to mistakes.

Ambiguity and underspecification enter when the Name starts with "e", since "e" indicats the beginning of an exponent in a FloatValue. 123efg is a lexical error in GraphQL.js which greedily starts to lex a FloatValue when it encounters the "e", however you might also expect it to validly lex (123, efg) and some implementations might do this.

Further, other languages offer variations of numeric literals which GraphQL does not support, such as hexidecimal literals. The input 0x1F properly lexes as (0, x, 1, F) however this is very likely a confusing syntax error. A similar issue exists for some languages which allow underscores in numbers for readability, 1_000 lexes a 1 and _ but fails when 000 is not a valid number.

References

graphql/graphql-spec@09cdaec

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant