Skip to content

Latest commit

 

History

History
146 lines (137 loc) · 5.58 KB

File metadata and controls

146 lines (137 loc) · 5.58 KB

Todo

  • primitive values
    • string values
      • escapes
      • bug where does not check for termination properly
      • no unescaped control characters
      • char to unicode escape
        • domain struct JSONChar
      • parse unicode escapes
      • check rfc
    • numbers
      • positive/negative (+/-)
      • powers (e/E)
    • null
    • boolean
  • objects
    • multi keys
    • validate duplicate keys
      • what if key and val are both same?
  • arrays
  • nested object
    • arbitrarily nested
  • validate whitespace to skip
  • formatting
    • make uglifier
    • make prettifier
    • general options
    • If object is empty, should be "{}"
    • standardize exponents
      • minifier should remove + and insignificant exponent 0s
    • standardize escapes
      • turn u escaped special cases to special case
      • use same casing for escapes
      • turn printable characters to normal (maybe an option, what if want cyrillic a to be escaped for example)
  • error handling
    • display implementation for each token
    • line/column
    • proper handling for multibyte characters
    • describe expected token
      • line/column of reason why expected (expected closing curly due to umatched open curly at xyz spot)
    • Unterminated
    • make naming more specific regarding Object and arrays (curly/square braces, open/opening/close/closing)
    • point to character like in rust's errors
    • patches for each error type
    • patch applicability (how confident am I that this is right?)
  • fix up From impls for Tokens. From should not be on token, but boolean makes sense
  • cli
    • stdin
    • files
    • help screen
    • --fix option
    • colors (support-color)
    • look into insta snapshot docs
    • stdin gracefully handle failure to read to buffer
  • rebrand
    • jjpwrgem crate name
    • jjp bin name
    • axolotl skateboard
  • accessible output (look into annotate snippets issue + miette)
  • maybe reparse a step ahead to see if then valid?

dev tooling

  • hook to format on commit
  • just script to install all tools
  • submodule installation

Testing

bugs

  • Tokenizer errors shouldn't report "expected start of JSON value" when parsing may be incomplete
  • When the prior token is {, provide help suggesting the next token should be quoted or flag an unidentified token
    • Investigate n_object_emoji
    • Investigate n_object_key_with_single_quotes
    • Investigate n_object_missing_colon.json
  • Handle inappropriately escaped forward slash in n_object_trailing_comment.json
  • Provide a hint to insert a value and closing curly when no significant characters remain
    • Investigate n_object_missing_value.json
  • Fix error message to state that a quote is expected after the opening quote
    • Investigate n_object_unterminated-value.json
  • Add helper messaging explaining that comments aren't allowed
  • expected key but found , should add key val beforehand
    • n_structure_open_object_comma
  • multichar emojis are not properly handled, see n_object_emoji.json
  • should recommend changing single quotes and backticks to double
    • n_object_single_quote
  • error reporting for keywords, for example trbe marks t as error. Should handle casing
    • n_incomplete_false
    • n_incomplete_null
    • n_incomplete_true
    • n_structure_capitalized_true
  • , at start of obj or arr should recommend delete
    • n_array_comma_and_number
    • n_array_just_comma
    • n_array_missing_value
  • recommend delete dup comma?
    • n_array_double_comma
  • remove multiple trailing commas
    • n_object_several_trailing_commas.json
  • recommend comma if potential valid next arr val
    • n_array_inner_array_no_comma
  • add placeholder and closing if no sig chars
    • n_array_newlines_unclosed
    • n_array_unclosed_trailing_comma
  • should recommend adding fraction digit 0 or remove
    • n_number_-2.
    • n_number_0.e1
  • should recommend adding exponent digit or remove
    • n_number_0.3e+
    • n_number_0.3e
    • n_number_0_capital_e+
    • n_number_0_capital_e
  • should recommend 0 before .
    • n_number_.-1
  • maybe warn on NaN or Infinity/other js idents?
    • n_number_-nan
  • general context of token parser? should give more specific if following num
    • n_number_0.1.2
  • maybe mark hex/octal/binary literals
    • n_number_hex_1_digit
    • n_number_hex_2_digits
  • whitespace in middle of tokens can be slurped for errors
    • n_number_minus_space_1
  • escape non printing for display or include unicode escape afterwards no matter what if not possible to get exhaustive list https://crates.io/crates/is_printable https://crates.io/crates/unicode-names2
    • n_structure_u+2060_word_joined
    • control
    • format U+2000 to U+206F
    • Variation Selectors: U+FE00 to U+FE0F
    • Private Use Area: U+E000 to U+F8FF
    • Tag Characters: U+E0001 to U+E007F
  • expected quote before end of string should suggest adding one
  • if capital U escape \U, then recommend lowercasing it if 4 hex digits after
    • n_string_unicode_capitalu.json
  • validate inappropriate surrogates
  • consider context aware quote closing
    • n_string_1_surrogate_then_escape adds " at end when in unclosed array may be more appropriate

extensions

  • json lines
  • trailing comma