TODO 6.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. Синтаксис:
  2. ✔ Однострочный `else` @done(20-07-06 20:37)
  3. ✔ `_` в выражениях @done(20-08-12 20:59)
  4. ☐ `if x = 10: ! comment`
  5. ☐ Вызов процедуры `The(Lady), 'or', the, Tiger`. Сейчас такое `*p(Lady), 'or', the, Tiger` работает
  6. ✔ Допускать на уровне синтаксиса неопределенные процедуры со звездочкой (например, `*proc`), а уже на уровне семантики запрещать @done
  7. ✔ Лишний `end` @done(20-07-13 01:22)
  8. ✔ Бардак с комментариями @done(20-07-10 08:09)
  9. ☐ Разобраться, почему parser всё еще допускает `proc call someAnotherStatement`, хотя изначально нужен `&`: `proc call & someAnotherStatement`. Явно что-то упустил, да и код станет понятнее, если инструкции как-то явно разбивать.
  10. ✔ В строках есть подстановка (например, `'<<expr>>'`) @done(20-07-09 23:00)
  11. ✔ Строковые значения в подстановке `'<<''str''>>'` и `"<<""x"">>"`, соответственно. Эх, ну зачем так делать? Можно же без экранизация обойтись, что ж вы за люди такие? Можно же так `'<<'str'>>'` распарсить. Можно было бы сказать, что мы просто хотим использовать воспользоваться выражением `'<<' + 'str'`, так и здесь выбьет ошибку: мол, непарное количество скобок. Ладно, ничего не поделаешь — придется делать.
  12. ☐ Полноценный HTML-parser
  13. ✔ Эх, а еще есть `<a href="exec:`. В этом мире слишком много зла. Хотя бы эту штуку придется сделать, если хочется полностью схватить все вызовы локаций.
  14. ☐ Если конструкция `if`/`act` обрывается на завершении локации, то можно так и сказать, а не расписывать полотно с ожидаемыми инструкциями
  15. ☐ Лишние `)`
  16. ✔ `$a[] = 'x'` — вполне допустимая конструкция, которая добавляет в конце массива элемент с таким-то значением. Ничего особенно, правда? Язык прост и предельно понятен, да... :face_palm: @done(20-07-14 02:13)
  17. ✔ `for` точно существует в Quest Navigator'е и точно не работает в QSP 5.7.0 под Windows
  18. ☐ `for нечётные = 1 to 10 step 2: *pl нечётные`
  19. ☐ Как-то нужно определять, что конструкция `for` разрешена или нет
  20. ☐ `gs 'loc', , 1` — пропуск аргумента. В QSP 5.7.0 под Windows не работает, но работает в Quest Navigator, кажется.
  21. Подсказки:
  22. ✔ Ключевые слова
  23. ✔ Функции
  24. ✔ Процедуры
  25. ✔ @low Бинарные операторы
  26. Семантика:
  27. ☐ `local v = 1` — жуть, правда? В Quest Navigator'е есть, а в QSP 5.7.0 под Windows нету. Синтаксически проходит как процедура `local` с параметром `v = 1`, так что дело за семантикой
  28. ☐ А ведь переменные `args` и `$curloc` для каждой локации локальны, значит, пришло время строить что-то более серьезное с областью видимости переменных.
  29. ✔ Вызов несуществующей функции/процедуры
  30. ✔ Переопределение процедур/функций
  31. ✔ Количество аргументов к процедурам @done(20-07-09 01:09)
  32. ✔ Количество аргументов к функциям @done(20-07-09 11:11)
  33. Явные ошибки присваивания:
  34. ☐ `a = 'foo'`, `#a = 'foo'`, `a[expr] = 'foo'`, `#a[expr] = 'foo'`
  35. ✔ Признавать `cla` и прочие процедуры без аргументов как процедуры, а не переменные, как это происходит сейчас @done(20-07-09 13:58)
  36. ✔ `add obj $someobj` — что делать с этим безобразием? Синтаксически это — вызов процедуры `add` с выражением `obj $someobj`, которое возвращает 0, если предмета `$someobj` нет в инвентаре, как заявлено в документации префиксного оператора `obj`. Однако документация говорит, что выражение `add obj [$выражение]` воспринимается как `addobj [$выражение]`. Какого лешего? Это контринтуитивно и глупо. `close all` — туда же вместе с `del act` и `del obj`.
  37. ✔ `MSG('content')` @done(20-07-09 13:58)
  38. Статический анализ:
  39. ☐ Удаление предмета, который нигде не добавляется
  40. ☐ Переменная присваивается, но ни разу не используется (заданные переменные — исключение)
  41. ☐ Переменная используется, но ни разу не присваивается (заданные переменные — исключение)
  42. ☐ Инструкции после `exit`, `jump` и прочих операторов перехода не сработают
  43. Highlight:
  44. ✔ Комментарий все еще не разбивает токены на несколько `Range` @done(20-07-06 11:29)
  45. ✔ Однотонный цвет комментария @done
  46. ✔ @low бинарные операторы
  47. ✔ Variable highlight @done(20-07-09 20:22)
  48. ✔ Label highlight
  49. ☐ Jump label highlight
  50. ☐ Label highlight in `func('label')` or `$func('label')`
  51. Форматирование:
  52. ☐ `stmt & ! comment`
  53. ✔ Убрать пробел после вызова процедуры без аргументов, например, `*pl ` @done(20-07-09 14:08)
  54. ✔ Разбивать строки, если они разделены `\n` (сделать выборочно)
  55. ✔ `$str = {}` превращает в: @done(20-07-10 10:26)
  56. ```qsp
  57. $str = {
  58. }
  59. ```
  60. ☐ Работа с проектом, то есть не просто с одним файлом, а с целым множеством.