Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
zerkalica opened this issue Sep 11, 2017 · 16 comments
Open

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

zerkalica opened this issue Sep 11, 2017 · 16 comments

Comments

@zerkalica
Copy link
Collaborator

zerkalica commented Sep 11, 2017

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

PS

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

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

@nin-jin
Copy link
Member

nin-jin commented Sep 11, 2017

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

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

@zerkalica
Copy link
Collaborator Author

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

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

@nin-jin
Copy link
Member

nin-jin commented Sep 11, 2017

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

Тулза, конечно, есть, но она лишь при сборке сейчас транслирует view.tree в ts: #254

@zerkalica
Copy link
Collaborator Author

zerkalica commented Sep 11, 2017

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

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

@nin-jin
Copy link
Member

nin-jin commented Sep 11, 2017

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

@zerkalica
Copy link
Collaborator Author

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

@nin-jin
Copy link
Member

nin-jin commented Sep 11, 2017

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

@zerkalica
Copy link
Collaborator Author

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

@nin-jin
Copy link
Member

nin-jin commented Sep 14, 2017

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

@zerkalica
Copy link
Collaborator Author

zerkalica commented Sep 15, 2017

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

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

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

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

@nin-jin
Copy link
Member

nin-jin commented Sep 15, 2017

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

@zerkalica
Copy link
Collaborator Author

zerkalica commented Sep 15, 2017

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

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

@zerkalica
Copy link
Collaborator Author

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

@nin-jin
Copy link
Member

nin-jin commented Oct 27, 2017

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

@gituser3000
Copy link
Contributor

gituser3000 commented Mar 21, 2020

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

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

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

@zerkalica
Copy link
Collaborator Author

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

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

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

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

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

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

Рефакторинг

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants