Skip to content

Commit

Permalink
✨ handle deps DSL
Browse files Browse the repository at this point in the history
  • Loading branch information
emillon committed Jul 26, 2024
1 parent d93c7f9 commit 8c00c2a
Show file tree
Hide file tree
Showing 4 changed files with 144 additions and 22 deletions.
23 changes: 21 additions & 2 deletions grammar.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ const dune_action = ($, name, value) =>

const PREC = { COMMENT: 0, STRING: 1 };

const atom_regexp = /[^;()"\s]+/;

const seq_regexp = (a, b) => new RegExp(a.source + b.source);

module.exports = grammar({
name: "dune",

Expand All @@ -35,7 +39,8 @@ module.exports = grammar({
choice(/[^\\"]/, seq("\\", choice("n", "\n", "r", '"', "\\"))),
),
),
_atom: ($) => /[^;()"\s]+/,
_atom: ($) => atom_regexp,
named_variable: ($) => seq_regexp(/:/, atom_regexp),
_list: ($) => seq("(", repeat($.sexp), ")"),
comment: ($) => token(prec(PREC.COMMENT, /;.*/)),
stanza: ($) =>
Expand Down Expand Up @@ -66,6 +71,7 @@ module.exports = grammar({
choice(
dune_field($, "name", $.alias_name),
dune_field($, "action", $.action),
$._deps_field,
$.sexp,
),
),
Expand Down Expand Up @@ -112,7 +118,7 @@ module.exports = grammar({
dune_field($, "mode", $._rule_mode),
dune_field($, "target", $._atom_or_qs),
dune_field($, "targets", repeat($._target)),
dune_field($, "deps", $.sexps1),
$._deps_field,
dune_field($, "action", $.action),
dune_field($, "enabled_if", $.blang),
dune_field($, "alias", repeat1($.alias_name)),
Expand All @@ -121,6 +127,19 @@ module.exports = grammar({
dune_field($, "locks", repeat1($.lock_name)),
),
),
_deps_field: ($) => dune_field($, "deps", repeat1($._dep)),
_dep: ($) =>
choice(
seq("(", $.named_variable, repeat1($._dep), ")"),
seq("(", "universe", ")"),
seq("(", "sandbox", $._atom_or_qs, ")"),
seq("(", "env_var", $._atom_or_qs, ")"),
seq("(", choice("alias", "alias_rec"), $.alias_name, ")"),
seq("(", "source_tree", $.file_name, ")"),
seq("(", "package", $.package_name, ")"),
seq("(", "glob_files", repeat1($._atom_or_qs), ")"),
$.file_name,
),
_target: ($) =>
choice($.file_name_target, seq("(", "dir", $.file_name_target, ")")),
_bool: ($) => choice("true", "false"),
Expand Down
16 changes: 3 additions & 13 deletions test/corpus/actions.txt
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,8 @@ system
(stanza_name)
(field_name)
(alias_name)
(sexp
(sexp)
(sexp)
(sexp
(sexp)))
(field_name)
(file_name)
(field_name)
(action
(action_name)
Expand All @@ -90,10 +87,6 @@ bash
(field_name)
(alias_name)
(field_name)
(sexps1
(sexp
(sexp)
(sexp)))
(field_name)
(action
(action_name)
Expand Down Expand Up @@ -255,10 +248,7 @@ no-infer
(file_name_target
(file_name))
(field_name)
(sexps1
(sexp
(sexp)
(sexp)))
(file_name)
(field_name)
(action
(action_name)
Expand Down
116 changes: 116 additions & 0 deletions test/corpus/deps.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
==========
named deps
==========

(alias
(name runtest)
(deps (:foo a b) (:baz foo (alias x)) a b c)
(action (echo "foo = %{foo}\nbaz = %{baz}\n")))

----

(source_file
(stanza
(stanza_name)
(field_name)
(alias_name)
(field_name)
(named_variable)
(file_name)
(file_name)
(named_variable)
(file_name)
(alias_name)
(file_name)
(file_name)
(file_name)
(field_name)
(action
(action_name)
(quoted_string))))

=======
sandbox
=======

(rule
(alias fswatch_win_tests)
(deps
(sandbox always))
(action
(run ./fswatch_win_tests.exe)))

---

(source_file
(stanza
(stanza_name)
(field_name)
(alias_name)
(field_name)
(field_name)
(action
(action_name)
(file_name_dep
(file_name)))))

=========
alias_rec
=========

(alias
(name default)
(deps (alias_rec all)))

----

(source_file
(stanza
(stanza_name)
(field_name)
(alias_name)
(field_name)
(alias_name)))

=======
package
=======

(alias
(name package-cycle)
(deps (package a) (package b)))

---

(source_file
(stanza
(stanza_name)
(field_name)
(alias_name)
(field_name)
(package_name)
(package_name)))

=======
env_var
=======

(alias
(name with_dep)
(deps (env_var X))
(action (run ./a.exe))
)

---

(source_file
(stanza
(stanza_name)
(field_name)
(alias_name)
(field_name)
(field_name)
(action
(action_name)
(file_name_dep
(file_name)))))
11 changes: 4 additions & 7 deletions test/corpus/stanzas.txt
Original file line number Diff line number Diff line change
Expand Up @@ -121,10 +121,8 @@ Rule
(file_name_target
(file_name))
(field_name)
(sexps1
(sexp
(sexp)
(sexp)))
(named_variable)
(file_name)
(field_name)
(action
(action_name)
Expand Down Expand Up @@ -173,9 +171,8 @@ Rule
(file_name_target
(file_name))
(field_name)
(sexps1
(sexp)
(sexp))
(file_name)
(file_name)
(field_name)
(action
(action_name)
Expand Down

0 comments on commit 8c00c2a

Please sign in to comment.