QSPFoundation / Qsp.FSharp

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

Closed gretmn102 closed 2 months ago

gretmn102 commented 2 months ago

Сейчас программа работает так:

Пользователь задаёт папку (там можно и отдельный файл, только в CLI оно не выведено), а затем шаблон кода, который нужно найти.

К примеру:

qsp-toolbox --txt2qsp path/to/txt2gam.exe $game_password --working-directory $dir_with_sources --threads 8
potions = 10;;

Программа:

Допустим, что в указанной папке есть файл 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, а когда-нибудь потом до всего этого доберусь.