QSP ecosystem written in F# environment. Contains: language core (AST, parser, printer), language server (LSP) and CLI utility for manipulating language sources.
4
stars
1
forks
source link
feat(cli)!: wrap exists command in `search` subcommand #43
перебирает рекурсивно во всех подпапках файлы *.qsp или *.gam
декомпилирует бинарники с помощью gam2txt (если нету в той же папке уже исходника с таким же именем или стоит флаг --updatesourceifexists)
прогоняет исходник через парсер и записывает ошибки в отдельный файл output.log (почему нельзя было сразу писать в консоль — загадка)
ищет код по заданному шаблону
Допустим, что в указанной папке есть файл game.qsps:
# begin
potions = 10
'Я заглядываю в рюкзак и обнаруживаю <<potions>> зелий.'
-
Тогда ouput.log будет таким:
Right
("$dir_with_sources\\game.qsps",
[("begin",
[({ StreamName = "$dir_with_sources\\game.qsps"
Index = 11L
Line = 2L
Column = 3L },
Assign (false, [AssignVar (NumericType, "potions")], Val (Int 10)))])])
Я это всё использовал на каталоге игр, чтобы проверить парсер. Если в output.log была ошибка в какой-то игре, то я открывал исходники в редакторе с расширением и смотрел, что ж там такое. В основном ошибки были связаны с end'ами. Серьёзно, это прям бич всего Куспа. Возникает он из-за банального незнания, как форматировать код.
А ещё у меня там реализованы какие-то зачатки поиска по образцу, но я не я не пойму, как оно работает. По-идеи, можно было прям в консоль написать statement (или несколько?). Этот код парсится, а потом сопоставляется с кодом исходника QSP. Если образец находится, то выводится номер строки, где оно было найдено. Пока всё сырое и непонятное.
Сейчас главное — обернуть всю эту махину в search, а когда-нибудь потом до всего этого доберусь.
Сейчас программа работает так:
Пользователь задаёт папку (там можно и отдельный файл, только в CLI оно не выведено), а затем шаблон кода, который нужно найти.
К примеру:
Программа:
*.qsp
или*.gam
gam2txt
(если нету в той же папке уже исходника с таким же именем или стоит флаг--updatesourceifexists
)output.log
(почему нельзя было сразу писать в консоль — загадка)Допустим, что в указанной папке есть файл
game.qsps
:Тогда
ouput.log
будет таким:Я это всё использовал на каталоге игр, чтобы проверить парсер. Если в
output.log
была ошибка в какой-то игре, то я открывал исходники в редакторе с расширением и смотрел, что ж там такое. В основном ошибки были связаны сend
'ами. Серьёзно, это прям бич всего Куспа. Возникает он из-за банального незнания, как форматировать код.А ещё у меня там реализованы какие-то зачатки поиска по образцу, но я не я не пойму, как оно работает. По-идеи, можно было прям в консоль написать statement (или несколько?). Этот код парсится, а потом сопоставляется с кодом исходника QSP. Если образец находится, то выводится номер строки, где оно было найдено. Пока всё сырое и непонятное.
Сейчас главное — обернуть всю эту махину в
search
, а когда-нибудь потом до всего этого доберусь.