diff --git a/DevGuide.md b/DevGuide.md index 8befa11..aa5aa90 100644 --- a/DevGuide.md +++ b/DevGuide.md @@ -88,21 +88,29 @@ ShellCheck has multiple output formatters. These take parsing results and output Let's say that we have a pet peeve: people who use `tmp` as a temporary filename. We want to warn about statements like `sort file > tmp && mv tmp file`, and suggest using `mktemp` instead. -We can start by looking at the AST for `sort file > tmp`. In a ShellCheck source directory, run `cabal build` to generate necessary files, then run `ghci ShellCheck/Parser.hs`: +We can start by looking at the AST for `sort file > tmp`. In a ShellCheck source directory, run `cabal build` to generate necessary files, then run `cabal repl` and `:load src/ShellCheck/Parser.hs`: ``` -$ ghci ShellCheck/Parser.hs -GHCi, version 8.0.1: http://www.haskell.org/ghc/ :? for help -Loaded GHCi configuration from /mnt/backup/live/devices/vm-home/haskell/shpell/.ghci -[1 of 7] Compiling Paths_ShellCheck ( dist/build/autogen/Paths_ShellCheck.hs, interpreted ) -[2 of 7] Compiling ShellCheck.Regex ( ShellCheck/Regex.hs, interpreted ) -[3 of 7] Compiling ShellCheck.AST ( ShellCheck/AST.hs, interpreted ) -[4 of 7] Compiling ShellCheck.ASTLib ( ShellCheck/ASTLib.hs, interpreted ) -[5 of 7] Compiling ShellCheck.Interface ( ShellCheck/Interface.hs, interpreted ) -[6 of 7] Compiling ShellCheck.Data ( ShellCheck/Data.hs, interpreted ) -[7 of 7] Compiling ShellCheck.Parser ( ShellCheck/Parser.hs, interpreted ) -Ok, modules loaded: ShellCheck.Parser, ShellCheck.AST, ShellCheck.ASTLib, ShellCheck.Data, ShellCheck.Interface, ShellCheck.Regex, Paths_ShellCheck. -*ShellCheck.Parser> +$ :load src/ShellCheck/Parser.hs +*ShellCheck.AST> :load src/ShellCheck/Parser.hs + +: warning: [-Wmissing-home-modules] + These modules are needed for compilation but not listed in your .cabal file's other-modules: + Paths_ShellCheck + ShellCheck.AST + ShellCheck.ASTLib + ShellCheck.Data + ShellCheck.Interface + ShellCheck.Regex +[1 of 7] Compiling Paths_ShellCheck ( /home/james/repos/shellcheck/dist-newstyle/build/x86_64-linux/ghc-8.8.4/ShellCheck-0.7.2/build/autogen/Paths_ShellCheck.hs, interpreted ) +[2 of 7] Compiling ShellCheck.Regex ( src/ShellCheck/Regex.hs, interpreted ) +[3 of 7] Compiling ShellCheck.AST ( src/ShellCheck/AST.hs, interpreted ) +[4 of 7] Compiling ShellCheck.Interface ( src/ShellCheck/Interface.hs, interpreted ) +[5 of 7] Compiling ShellCheck.Data ( src/ShellCheck/Data.hs, interpreted ) +[6 of 7] Compiling ShellCheck.ASTLib ( src/ShellCheck/ASTLib.hs, interpreted ) +[7 of 7] Compiling ShellCheck.Parser ( src/ShellCheck/Parser.hs, interpreted ) +Ok, 7 modules loaded. +*ShellCheck.Parser> ``` This has given us a REPL where we can call parsing functions. There's a convenient `debugParseScript` function that will take a string and give the complete parser result (minus noisy token positions):