Highlight.js не уважает родительское регулярное выражение подрежима - PullRequest
3 голосов
/ 22 октября 2019

Мне нужно написать лексер, который бы правильно отображал команды моего инструмента командной строки.

$ dvc add file.csv
$ dvc pipeline list

Таким образом, команда начинается с dvc и может иметь одну или две подкоманды - add или pipeline list соответственно.

Следовательно, в первом и втором случае следует выделить dvc add и dvc pipeline list соответственно.

contains: [
          {
            begin: /^\s*\$\s(dvc|git) [a-z-]+/,
            returnBegin: true,
            contains: [
              {
                begin: /dvc [a-z-]+ ?/,
                lexemes: '[a-z-]+',
                keywords: {
                  built_in:
                    'dvc'
                },
                contains: [
                  {
                    begin: /\w+(?![\S])/,
                    keywords: {
                      built_in: 'list'
                    }
                  }
                ],
                className: 'strong'
              }
            ]
          }
        ]

Соответствует dvc pipeline list, даже если родительское регулярное выражение т.е. /^\s*\$\s(dvc|git) [a-z-]+/ должен совпадать только до dvc pipeline. Как это точно работает?

Как /dvc [a-z-]+ ?/ переопределяет его и продолжает сопоставлять выражение?

Пожалуйста, обратитесь к этой библиотеке документов здесь: https://highlightjs.readthedocs.io/en/latest/reference.html

...