osdb/notes.org

7.3 KiB
Raw Blame History

Notes

DONE show errors with ariadne

[X] errors should have a generic show() function

CLOCK: [2025-05-03 sam. 18:40][2025-05-03 sam. 18:46] => 0:06

DONE OSDBError::display() should take a filename and display it alongside the error

CLOCK: [2025-05-03 sam. 21:24][2025-05-03 sam. 21:28] => 0:04

DONE OSDBError::display() should take an input string, to be able to resolve spans inside the error

CLOCK: [2025-05-03 sam. 21:28][2025-05-03 sam. 21:30] => 0:02

DONE OSDBError::display() should generate ariadne errors and return those

CLOCK: [2025-05-03 sam. 21:30][2025-05-03 sam. 21:50] => 0:20

DONE error display should include a span to show where the error occured

CLOCK: [2025-05-03 sam. 21:51][2025-05-03 sam. 21:54] => 0:03

DONE deduplicate error display code

CLOCK: [2025-05-03 sam. 21:55][2025-05-03 sam. 22:01] => 0:06

DONE snapshot testing

DONE Find the snapshot testing library

CLOCK: [2025-05-03 sam. 18:48][2025-05-03 sam. 18:49] => 0:01

DONE document myself on insta, the snapshot testing library

CLOCK: [2025-05-03 sam. 18:49][2025-05-03 sam. 18:57] => 0:08

DONE insta test startup message

CLOCK: [2025-05-03 sam. 19:00][2025-05-03 sam. 19:05] => 0:05

DONE insta test insert

CLOCK: [2025-05-03 sam. 21:10][2025-05-03 sam. 21:14] => 0:04 CLOCK: [2025-05-03 sam. 19:08][2025-05-03 sam. 19:21] => 0:13

DONE all display of command results must be made via a display method on CommandExecutionResult

CLOCK: [2025-05-03 sam. 21:02][2025-05-03 sam. 21:09] => 0:07

DONE insta test select

CLOCK: [2025-05-03 sam. 21:15][2025-05-03 sam. 21:16] => 0:01

DONE insta test .exit

CLOCK: [2025-05-03 sam. 21:16][2025-05-03 sam. 21:18] => 0:02

DONE insta test wrong statement

CLOCK: [2025-05-03 sam. 21:18][2025-05-03 sam. 21:21] => 0:03

DONE insta test wrong meta-command

CLOCK: [2025-05-03 sam. 21:21][2025-05-03 sam. 21:22] => 0:01

DONE exit message is not displayed when pressing C-d   bug

CLOCK: [2025-05-03 sam. 19:06][2025-05-03 sam. 19:07] => 0:01

DONE switch statement parsing to more extensible token-based algorithm

CLOCK: [2025-05-04 dim. 12:07][2025-05-04 dim. 12:10] => 0:03 CLOCK: [2025-05-04 dim. 12:10][2025-05-04 dim. 12:22] => 0:12

DONE recognize meta-commands as tokens

CLOCK: [2025-05-04 dim. 13:32][2025-05-04 dim. 13:35] => 0:03 CLOCK: [2025-05-04 dim. 13:27][2025-05-04 dim. 13:32] => 0:05

DONE CommandParseError must have a ScanError variant with an Into impl

CLOCK: [2025-05-04 dim. 13:35][2025-05-04 dim. 13:38] => 0:03

DONE ScanErrors must be convertible to ariadne reports

DONE Remove the CommandParseError Display implementation

CLOCK: [2025-05-04 dim. 13:38][2025-05-04 dim. 13:44] => 0:06

DONE implement OSDBError for ScanError

CLOCK: [2025-05-04 dim. 13:45][2025-05-04 dim. 13:56] => 0:11

DONE remove token types which are not recognized at all

DONE create a generic parse command that parses string into tokens into Command

CLOCK: [2025-05-04 dim. 14:01][2025-05-04 dim. 14:14] => 0:13

DONE parse tokens into meta-commands

DONE error offsets are incorrect

DONE remove old FromStr parser implementation

DONE use a better readline impl

DONE inform myself on the different alternatives and decide on one

i will use rustyline, since it seems like the most feature-complete

DONE do the impl

DONE make history work

DONE have the rl instance be spawned from main

DONE figure out how to locate the app data directory on linux

DONE create our own app data directory

DONE load and save the history from a file in this directory

DONE handle non-interactive input better

DONE show marking where error occurs

DONE remove uneeded error variants

DONE parse integers

DONE Function to get a token until condition is false

DONE Parse the integer

DONE parse strings

DONE better error message display for unclosed " in string

DONE print errors to stderr

DONE write a proper grammar

DONE .about meta-command

DONE .version meta-command

TODO .license meta-command

TODO .help meta-command

DONE parse insert statements in the form

insert <id:int> <username:string> <email:string>

DONE parse row insert

DONE separate statements with semicolons

DONE this error message could be better

#+begin example Error: unexpected token ╭─[ <stdin>:1:24 ] │ 1 │ insert 0 "user" "email" │ │ │ ╰─ found end of file "" │ │ Note: expected token type to be one of ["semicolon"] ───╯ #+end example

plan

  1. Create an example mapping system

    • Define a mapping of token types to example values
    • Example: "integer" → "42", "string" → "example", "semicolon" → ";"
  2. Enhance CommandParseError

    • Add a method to generate user-friendly error messages
    • Include both the expected token type and concrete examples
  3. Implementation approach

    • Create a static lookup table or function that returns examples
    • Extend existing error handling to include examples in messages
    • Make sure the examples follow SQL syntax conventions
  4. Error display refinement

    • Update error_display.rs to include these examples
    • Format error messages to show both what was expected and example syntax
  5. Testing

    • Add tests that verify the error messages include helpful examples
    • Ensure examples are contextually appropriate

This will make errors like "expected semicolon" more helpful by showing "expected semicolon (example: ;)".

DONE correct all instances of <unknown> in locations

DONE meta-commands must be followed by end-of-file

TODO project code documentation

TODO project usage documentation

DONE in case of parse error, skip until next semicolon to better recover

TODO serialize/deserialize row to/from raw bytes

TODO look for best practices for creating binary formats

WAIT cli tests using insta-cmd

WAIT autocompletion

needs a more complicated parser for that to make sense

WAIT tweak rustyline it to make multiline entry work

need to terminate commands with semicolons for that to make sense