32 lines
937 B
JavaScript
32 lines
937 B
JavaScript
module.exports = grammar({
|
|
name: 'nixshell',
|
|
|
|
rules: {
|
|
source_file: $ => seq($.first_line, repeat($.next_line)),
|
|
|
|
first_line: $ => seq($.shebang_open, $.opt_ws, optional(seq($.env, $.ws)), $.nix_shell),
|
|
next_line: $ => seq($.newline, choice(
|
|
$.annotation_line,
|
|
// TODO: capture this
|
|
repeat(/./),
|
|
)),
|
|
annotation_line: $ => seq($.shebang_open, $.opt_ws, $.nix_shell, $.nix_shell_args),
|
|
// payload_next_line: $ => /\n.*/,
|
|
// payload_line: $ => /.*/,
|
|
// payload_line: $ => repeat(/./),
|
|
|
|
// nix_shell_directive_open: $ => '#!nix-shell',
|
|
// TODO: actually parse nix-shell arguments
|
|
nix_shell_args: $ => ' -i bash',
|
|
|
|
// TODO: hide these (prefix with underscore)
|
|
shebang_open: $ => '#!',
|
|
// TODO: allow `usr/bin/env`, `env`
|
|
env: $ => '/usr/bin/env',
|
|
nix_shell: $ => 'nix-shell',
|
|
ws: $ => / +/,
|
|
opt_ws: $ => / */,
|
|
newline: $ => '\n',
|
|
}
|
|
});
|