#+title: Notes #+property: EFFORT_ALL 0 10 * DONE show errors with ariadne :PROPERTIES: :EFFORT: 10min :END: ** [X] errors should have a generic show() function :PROPERTIES: :EFFORT: 10min :END: :LOGBOOK: CLOCK: [2025-05-03 sam. 18:40]--[2025-05-03 sam. 18:46] => 0:06 :END: ** DONE OSDBError::display() should take a filename and display it alongside the error :LOGBOOK: CLOCK: [2025-05-03 sam. 21:24]--[2025-05-03 sam. 21:28] => 0:04 :END: ** DONE OSDBError::display() should take an input string, to be able to resolve spans inside the error :PROPERTIES: :EFFORT: 10 :END: :LOGBOOK: CLOCK: [2025-05-03 sam. 21:28]--[2025-05-03 sam. 21:30] => 0:02 :END: ** DONE OSDBError::display() should generate ariadne errors and return those :PROPERTIES: :EFFORT: 10 :END: :LOGBOOK: CLOCK: [2025-05-03 sam. 21:30]--[2025-05-03 sam. 21:50] => 0:20 :END: ** DONE error display should include a span to show where the error occured :PROPERTIES: :EFFORT: 10 :END: :LOGBOOK: CLOCK: [2025-05-03 sam. 21:51]--[2025-05-03 sam. 21:54] => 0:03 :END: ** DONE deduplicate error display code :PROPERTIES: :EFFORT: 10 :END: :LOGBOOK: CLOCK: [2025-05-03 sam. 21:55]--[2025-05-03 sam. 22:01] => 0:06 :END: * DONE snapshot testing ** DONE Find the snapshot testing library :PROPERTIES: :EFFORT: 10min :END: :LOGBOOK: CLOCK: [2025-05-03 sam. 18:48]--[2025-05-03 sam. 18:49] => 0:01 :END: ** DONE document myself on insta, the snapshot testing library :PROPERTIES: :EFFORT: 10min :END: :LOGBOOK: CLOCK: [2025-05-03 sam. 18:49]--[2025-05-03 sam. 18:57] => 0:08 :END: ** DONE insta test startup message :PROPERTIES: :EFFORT: 10min :END: :LOGBOOK: CLOCK: [2025-05-03 sam. 19:00]--[2025-05-03 sam. 19:05] => 0:05 :END: ** DONE insta test insert :PROPERTIES: :EFFORT: 10min :END: :LOGBOOK: 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 :END: *** DONE all display of command results must be made via a display method on CommandExecutionResult :PROPERTIES: :EFFORT: 10min :END: :LOGBOOK: CLOCK: [2025-05-03 sam. 21:02]--[2025-05-03 sam. 21:09] => 0:07 :END: ** DONE insta test select :PROPERTIES: :EFFORT: 10min :END: :LOGBOOK: CLOCK: [2025-05-03 sam. 21:15]--[2025-05-03 sam. 21:16] => 0:01 :END: ** DONE insta test .exit :PROPERTIES: :EFFORT: 10min :END: :LOGBOOK: CLOCK: [2025-05-03 sam. 21:16]--[2025-05-03 sam. 21:18] => 0:02 :END: ** DONE insta test wrong statement :PROPERTIES: :EFFORT: 10min :END: :LOGBOOK: CLOCK: [2025-05-03 sam. 21:18]--[2025-05-03 sam. 21:21] => 0:03 :END: ** DONE insta test wrong meta-command :PROPERTIES: :EFFORT: 10min :END: :LOGBOOK: CLOCK: [2025-05-03 sam. 21:21]--[2025-05-03 sam. 21:22] => 0:01 :END: * DONE exit message is not displayed when pressing C-d :bug: :PROPERTIES: :EFFORT: 10min :END: :LOGBOOK: CLOCK: [2025-05-03 sam. 19:06]--[2025-05-03 sam. 19:07] => 0:01 :END: * DONE switch statement parsing to more extensible token-based algorithm :PROPERTIES: :EFFORT: 10 :END: :LOGBOOK: 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 :END: ** DONE recognize meta-commands as tokens :PROPERTIES: :EFFORT: 10 :END: :LOGBOOK: 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 :END: ** DONE CommandParseError must have a ScanError variant with an Into impl :PROPERTIES: :EFFORT: 10 :END: :LOGBOOK: CLOCK: [2025-05-04 dim. 13:35]--[2025-05-04 dim. 13:38] => 0:03 :END: ** DONE ScanErrors must be convertible to ariadne reports :PROPERTIES: :EFFORT: 10 :END: *** DONE Remove the CommandParseError Display implementation :PROPERTIES: :EFFORT: 10 :END: :LOGBOOK: CLOCK: [2025-05-04 dim. 13:38]--[2025-05-04 dim. 13:44] => 0:06 :END: *** DONE implement OSDBError for ScanError :PROPERTIES: :EFFORT: 10 :END: :LOGBOOK: CLOCK: [2025-05-04 dim. 13:45]--[2025-05-04 dim. 13:56] => 0:11 :END: ** DONE remove token types which are not recognized at all :PROPERTIES: :EFFORT: 10 :END: ** DONE create a generic parse command that parses string into tokens into Command :PROPERTIES: :EFFORT: 10 :END: :LOGBOOK: CLOCK: [2025-05-04 dim. 14:01]--[2025-05-04 dim. 14:14] => 0:13 :END: ** DONE parse tokens into meta-commands :PROPERTIES: :EFFORT: 10 :END: * 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 ** DONE parse row insert * DONE separate statements with semicolons * TODO this error message could be better #+begin example Error: unexpected token ╭─[ :1:24 ] │ 1 │ insert 0 "user" "email" │ │ │ ╰─ found end of file "" │ │ Note: expected token type to be one of ["semicolon"] ───╯ #+end example * TODO correct all instances of in locations * TODO meta-commands must be followed by end-of-file * 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 https://insta.rs/docs/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