From 3081af60b2f8582f2f5619b0ff2485b132b66fb8 Mon Sep 17 00:00:00 2001 From: Scott Richmond Date: Tue, 4 Jun 2024 12:13:40 -0400 Subject: [PATCH] parse docstrings --- janet/parser.janet | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/janet/parser.janet b/janet/parser.janet index 1874de0..8327021 100644 --- a/janet/parser.janet +++ b/janet/parser.janet @@ -725,7 +725,7 @@ (accept-many parser :newline) (def rhs (nonbinding parser)) (print "parsed rhs") - [[lhs guard rhs]] + {:clauses [[lhs guard rhs]]} ) ([err] err) ) @@ -757,13 +757,18 @@ (def origin (current parser)) (expect parser :lbrace) (advance parser) (accept-many parser ;terminators) + (def doc (when (= :string ((current parser) :type)) + (def docstring ((current parser) :literal)) + (advance parser) + (accept-many parser ;terminators) + docstring)) (def data @[]) (while (not (check parser :rbrace)) (if (check parser :eof) (error {:type :error :token origin :data data :msg "unclosed brace"})) (array/push data (capture fn-clause parser))) (advance parser) - data) + {:clauses data :doc doc}) (defn- lambda [parser] (def origin (current parser)) @@ -783,11 +788,11 @@ (def name (-> parser word-only (get :data))) (print "function name: ") (pp name) - (def data (case (-> parser current type) + (def {:clauses data :doc doc} (case (-> parser current type) :lbrace (fn-clauses parser) :lparen (fn-simple parser) - :nothing)) - @{:type :fn :name name :data data :token origin}) + {:clauses :nothing})) + @{:type :fn :name name :data data :token origin :doc doc}) ([err] err))) ### compoound forms @@ -1130,9 +1135,9 @@ (do # (comment (def source ` -fn foo -fn bar -fn () -> :baz +fn foo { + () -> :clause +} `) (def scanned (s/scan source)) (print "\n***NEW PARSE***\n") @@ -1148,6 +1153,7 @@ fn () -> :baz # FIXME: + # TODO: # DECIDE: # - when to use a flat try/catch format, and when to use capture/expect-ret to get values instead of errors