This is a better link to show all Bash's reserved words/keywords: https://www.gnu.org/software/bash/manual/bash.html#Reserved-Words I will reach out to tree-sitter-bash folks to add the missing things to the grammar. On Mon, Oct 24, 2022 at 9:41 AM João Paulo Labegalini de Carvalho < jaopaulolc@gmail.com> wrote: > Thanks for pointing that out. I am still getting familiar with tree-sitter > thus the message sounded very generic. > > According to the GNU Bash Reference Manual, "time" is a reserved > > word. But tree-sitter does not include it in the grammar. > > Should I submit a PR for tree-sitter-bash to add "time", and possibly > other missing reserved word/keywords, or should I just fontify those > recognized by tree-sitter-bash in shell-script-mode? > > I believe the best course of action is to make tree-sitter-bash as > complete as possible. That way the regex and tree-sitter fontification will > fontify exactly the same things. > > What do you guys think? > > On Sun, Oct 23, 2022 at 10:20 PM Yuan Fu wrote: > >> >> >> > On Oct 22, 2022, at 8:51 AM, João Paulo Labegalini de Carvalho < >> jaopaulolc@gmail.com> wrote: >> > >> > I am getting a query error but I don't understand why. >> > >> > The following query is fine: >> > >> > (defvar sh-script--treesit-bash-keywords >> > '("case" "do" "done" "elif" "else" "esac" "export" "fi" "for" >> > "function" "if" "in" "unset" "while" "then")) >> > >> > (treesit-validate-query 'bash `([ ,@sh-script--treesit-bash-keywords ] >> @font-lock-keyword-face)) >> > >> > However the following query is said INVALID by `treesit-validate-query': >> > (treesit-validate-query 'bash `([ ,@(sh-feature sh-leading-keywords) ] >> @font-lock-keyword-face)) >> > Node type error at: 3 >> > ["time" "!" "do" "done" ...] @font-lock-keyword-face >> > >> > time" is highlighted in the *tree-sitter check query* buffer. >> > >> > Even though the forms below evaluate to equivalent forms: >> > `([ ,@sh-script--treesit-bash-keywords] @font-lock-keyword-face) >> > evaluates to: >> > ([ "case" "do" "done" "elif" ... ] @font-lock-keyword-face) >> > >> > `([ ,@(sh-feature sh-leading-keywords) ] @font-lock-keyword-face) >> > evaluates to: >> > (["time" "!" "do" "done" ...] @font-lock-keyword-face) >> > >> > >> > Any clues to what I am doing wrong? >> >> It is saying that there is no “time” node in bash grammar. You probably >> need to consult the grammar file of tree-sitter-bash to see what are the >> keywords it recognizes. >> >> For example, running the following snippet >> >> (let (collection) >> (goto-char (point-min)) >> (while (re-search-forward "'[^ ][^ ]+?'" nil t) >> (push (match-string 0) collection)) >> (pop-to-buffer "*result*") >> (dolist (keyword (cl-remove-duplicates collection :test #'equal)) >> (insert keyword "\n"))) >> >> in the grammar.js gives me >> >> '\\\\' >> '>(' >> '<(' >> '$(' >> ':-' >> ':?' >> '${' >> ')*' >> '([^' >> '[^' >> '--' >> '++' >> 'alternative' >> 'consequence' >> 'right' >> '>=' >> '<=' >> '-=' >> '!=' >> 'operator' >> 'left' >> '<<<' >> 'destination' >> '>|' >> '>&' >> '<&' >> '&>>' >> '&>' >> '>>' >> 'descriptor' >> 'index' >> '==' >> '=~' >> 'argument' >> 'unsetenv' >> 'unset' >> 'local' >> 'readonly' >> 'export' >> 'typeset' >> 'declare' >> ']]' >> '[[' >> '||' >> '&&' >> '|&' >> 'name' >> 'function' >> ';;&' >> ';&' >> 'fallthrough' >> ';;' >> 'termination' >> 'esac' >> 'case' >> 'else' >> 'elif' >> 'fi' >> 'then' >> 'if' >> 'done' >> 'do' >> 'until' >> 'while' >> '))' >> 'update' >> 'condition' >> 'initializer' >> '((' >> 'value' >> 'in' >> 'variable' >> 'select' >> 'for' >> 'redirect' >> 'body' >> '\n' >> '<<-' >> '<<' >> '+=' >> 'bash' >> '\\s' >> '\\' >> '\\]' >> '\\[' >> >> >> Yuan > > > > -- > João Paulo L. de Carvalho > Ph.D Computer Science | IC-UNICAMP | Campinas , SP - Brazil > Postdoctoral Research Fellow | University of Alberta | Edmonton, AB - > Canada > joao.carvalho@ic.unicamp.br > joao.carvalho@ualberta.ca > -- João Paulo L. de Carvalho Ph.D Computer Science | IC-UNICAMP | Campinas , SP - Brazil Postdoctoral Research Fellow | University of Alberta | Edmonton, AB - Canada joao.carvalho@ic.unicamp.br joao.carvalho@ualberta.ca