mam_mol icon indicating copy to clipboard operation
mam_mol copied to clipboard

Отдельный tree-plugin для babel или ts

Open zerkalica opened this issue 6 years ago • 16 comments

Нет ли standalone версии tree? Что б генерировал чистые классы из tree пока хотя бы в template strings и его можно было встроить в babel или ts.

PS

Я попытался для реакта применить подход "все содержимое компонента - в точки расширения". без tree получается некрасиво. Каждая хрень в JSX-верстке должна иметь уникальный идентификатор или быть функцией.

Пример моего counter: demo, src

zerkalica avatar Sep 11 '17 11:09 zerkalica

Вам нужны только эти два файла:

https://github.com/eigenmethod/mol/blob/master/tree/tree.ts - для работы с форматом tree https://github.com/eigenmethod/mol/blob/master/view/tree/tree.ts - для работы с языком view.tree

nin-jin avatar Sep 11 '17 13:09 nin-jin

А как поддержка типов делается у вас. Вот скомпилился tree в ts-классы, а откуда возьмется информация о типах или все считается строками?

Как ide выдаст предупреждение? Есть какая-то тулза, которая слушает изменения в tree, компилит ts и спустя какое-то время, watch ts сработает и ide покажет ошибки?

zerkalica avatar Sep 11 '17 14:09 zerkalica

Типы выводятся TS компилятором. Единственный нюанс - списки и словари могут содержать любые значения.

Тулза, конечно, есть, но она лишь при сборке сейчас транслирует view.tree в ts: https://github.com/eigenmethod/mol/issues/254

nin-jin avatar Sep 11 '17 14:09 nin-jin

Хотелось бы конечно в ts или в flow поддержку, с автокомплитом прям в tree без всяких компиляций, вы не оценивали трудозатраты? Вроде во flow/ts обещают поддержку syntax-плагинов. Или как в ангуларе сделали - форкнули ts и сляпали ngc.

А не покажите пример, где лажает ts со словарями или списками? Я б во flow по аналогии попробовал бы проверить.

zerkalica avatar Sep 11 '17 15:09 zerkalica

Да ещё и под все IDE.. Боюсь трудоёмкость слишком высока.

nin-jin avatar Sep 11 '17 15:09 nin-jin

Под IDE не надо, достаточно под ts, сейчас тенденция, что IDE - просто морды к стандартным анализаторам, вроде flow/ts.

zerkalica avatar Sep 11 '17 15:09 zerkalica

Тенденция-то хорошая, но она ещё в зачаточном состоянии.

nin-jin avatar Sep 11 '17 16:09 nin-jin

Вы не думали о том, как лучше встроить tree в ts? что б плагином все это конвертить в классы. Например, в template strings работала бы типизация переменных.

zerkalica avatar Sep 14 '17 10:09 zerkalica

Не очень понял что вы имеете ввиду

nin-jin avatar Sep 14 '17 15:09 nin-jin

Преобразовать tree в функцию с шаблоном, по которому ts сгенерит класс:

// some.tree.js
const Some = (t: ISome) => `
  prop1:
      ${t.value}
`

Хотя тут наверное больше проблем будет с интерфейсом.

Пока не знаю как лучше, идея в том, что бы задействовать Compiler-API для генерации ts AST из tree. И написать language service plugin для его нормальной поддержки в ide

zerkalica avatar Sep 15 '17 10:09 zerkalica

Интересная штука, правда как-то не завелась у меня.

nin-jin avatar Sep 15 '17 12:09 nin-jin

Судя по-всему для поддержки типов нужно дождаться Providing types.

Еще упоминается Custom module resolution, но пока нет видимо api для этого. Максимум transformation-plugin можно сделать из валидного ts. Например, когда tree в строке.

zerkalica avatar Sep 15 '17 12:09 zerkalica

Вот, кстати ts-graphql-plugin. Вполне себя норм комплитит, не думали что-то подобное сделать для tree в виде template strings? Проще будет песочницу сделать.

zerkalica avatar Oct 27 '17 07:10 zerkalica

Боюсь я не осилю в ближайшее время.

nin-jin avatar Oct 27 '17 11:10 nin-jin

Описание требуемого функционала для плагина к .tree:

  1. Навигация по клику на имя компонента к его определению (или к скомпиленной версии .tree, откуда можно средствами ts перейти к определению компонента) Здесь вопрос к компонентам, которые не скомпилены и для них нет сорсмап (дефолтные мол компоненты?). Должны ли мы поддерживать навигацию по таким? Если да, то сорс мапы здесь не помогут. В таком случае фолбэчим до текстового поиска?
  2. По клику на атрибут/функцию навигация к а) Скомпиленной версии б) Переопределенной в наследнике версии, фолбэк к скомпиленной, если не переопределено.
  3. Подсказки по ходу набора текста. Если идет выбор компонента, от которого наследуемся, то соответственно должен выдаваться полный список доступных компонентов. Если описываются атрибуты, то должны быть подсказки по атрибутам и т.д..
  4. Рефакторинг?
  5. Навигация к файлу с переводами?
  6. Подсветка

Открыто к обсуждению )

gituser3000 avatar Mar 21 '20 19:03 gituser3000

@gituser3000 Давай сделаем todo, где в порядке приоритетов все это перечислим, сперва надо диагностику выводить в tree. Основая идея в том, что б проксировать как можно больше фич от сгенеренного view.ts и tsservr, через маппинг позиций.

Плагин к ide - должен быть самой простой и тонкой прослойкой в tsserver. Сам tsserver расширивается между двумя плагинами, штатным ts-плагином и tree-плагином.

Можно выделить 3 истории в порядке значимости и удобства реализации:

Вывод ошибок в tree

Автокомплит в tree

Навигация по ctrl-click

Рефакторинг

zerkalica avatar Mar 22 '20 11:03 zerkalica