Комментарии 22
Пожалуйста, не надо так. AST люди придумали не потому, что им нечем было заняться, а потому что AST — это то, с чем de facto работает рантайм. Регулярками и простым заглядыванием вы никогда не добьетесь правильного результата. Вот то, что приходит в голову сразу; уверен, я смог бы придумывать еще и еще, если бы вся гибельность подхода не была и так очевидна.
42/*foo*/
// foo */ bar
Зачем вы задаете вопрос, на который я точно не смогу ответить, поскольку «все» редакторы в 2020 — почти несчетное множество?
В хороших редакторах для пригодных для этого языков — да.
В хороших редакторах для пригодных для этого языков
есть у меня notepad3 (он же notepad2). подсвечивает примерно 50 языков. по количеству языков понятно, что ast в нем и не пахнет.
хороший редактор. даже в голову не приходило подойти к разработчику и бросить «не надо так». это я к тому, что не нужно обобщать. подсветка кода не только в крютых ide нужна.
кстати, 42/*foo*/ она парсит нормально ;)
И зачем вообще делать такого рода предположения о проекте с открытым исходным кодом? Там под капотом Scintilla (которая в основе того же SciTE) и обычные лексеры, никаких велосипедов.
потому что AST — это то, с чем de facto работает рантайм
а в js нам каким боком Ваш рантайм упал?
И что не так с Вашим примером? Вроде в статье однострочные комментарии до конца строки считываются
В просто случае ваш подход может и сработать, но к примеру код C++ вообще нетривиально подсветить, потому что банально трудно парсить, даже VS иногда не справляется. И выход только один — честно генерировать AST на основе полного парсинга программы с сохранением объявленных классов, функций и enum'ов с помощью подручных инструментов, а вот потом уже делать подсветку на основе этого контекста
Для чего нужна подстветка?
Для IDE.
А там AST все равно необходим.
Например, для проверки кода на ошибки.
var x=10/**/ /2;
Несколько лет назад писал подсветку для своего хобби-проекта. Хотя писалась она не на js и не для js, идеи отчасти схожи. Основные отличия:
- Вместо одной переменной состояния стек состояний.
- Вместо посимвольной обработки поиск по регексам.
На примерах из статьи и комментариев всё работает как надо, насколько могу судить. Правда, подсветка регекса работает только если перед ним пробел либо открывающаяся скобка (либо начало строки).
Да, тут одинаковый стиль текста выставлен для чисел и регексов.
Занятие на вечер: пишем подсветку синтаксиса