diff --git a/README.md b/README.md index 2e7cf9b..4eb6495 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,14 @@ Generally this involves somehow configuring this information: If you get it working in any other environments, I'd love to know! It would be great to have instructions on how to set up other editors! +## Batch mode + +You can gather diagnostics without connecting your editor: + +```sh +fennel-ls --check my-file.fnl f2.fnl # prints diagnostics for the files given +``` + # Default Settings fennel-ls can be configured over LSP. Any setting that's not provided will be filled in with the defaults, which means that `{}` will be a valid configuration with default settings. You can provide different settings in the same shape as the default settings in order to override the defaults. diff --git a/src/fennel-lint.fnl b/src/fennel-lint.fnl deleted file mode 100644 index 91c2311..0000000 --- a/src/fennel-lint.fnl +++ /dev/null @@ -1,26 +0,0 @@ -(local dispatch (require :fennel-ls.dispatch)) -(local state (require :fennel-ls.state)) -(local diagnostics (require :fennel-ls.diagnostics)) -(local {: view} (require :fennel)) - -;; set up the state of fennel-ls into the `server` table -(local server {}) -(dispatch.handle* server {:id 1 - :jsonrpc "2.0" - :method "initialize" - :params {:capabilities {} - :clientInfo {:name "Neovim" :version "0.7.2"} - :initializationOptions {} - :rootPath "." - :rootUri "file://." - :trace "off" - :workspaceFolders [{:name "." - :uri "file://."}]}}) - -;; open the file specified by (. arg 1) from the command line -(local file (state.get-by-uri server (.. "file://" (. arg 1)))) -;; run diagnostics to populate file.diagnostics field -(diagnostics.check server file) -;; print the output -(each [_ v (ipairs file.diagnostics)] - (print (view v))) diff --git a/src/fennel-ls.fnl b/src/fennel-ls.fnl index 6b3b61d..5e4f83f 100644 --- a/src/fennel-ls.fnl +++ b/src/fennel-ls.fnl @@ -1,5 +1,22 @@ (local dispatch (require :fennel-ls.dispatch)) (local json-rpc (require :fennel-ls.json-rpc)) +(local state (require :fennel-ls.state)) +(local diagnostics (require :fennel-ls.diagnostics)) +(local {: view} (require :fennel)) + +(λ check [filename] + (let [server (doto {} + (dispatch.handle* {:id 1 + :jsonrpc "2.0" + :method "initialize" + :params {:capabilities {} + :clientInfo {:name "fennel-ls"} + :rootUri "file://"}})) + file (state.get-by-uri server (.. "file://" filename))] + (diagnostics.check server file) + (each [_ v (ipairs file.diagnostics)] + ;; perhaps nicer formatting in the future? + (print (view v))))) (λ main-loop [in out] (local send (partial json-rpc.write out)) @@ -9,8 +26,13 @@ (dispatch.handle state send msg)))) (λ main [] - (main-loop - (io.input) - (io.output))) + (case arg + ["--check" & filenames] (each [_ filename (ipairs filenames)] + (print "Checking" filename) + (check filename)) + (where (or ["--server"] [nil])) (main-loop (io.input) + (io.output)) + _args (do (io.stderr:write "USAGE: fennel-ls [--check file] [--server]\n") + (os.exit 1)))) (main)