LINUX.ORG.RU

Разбивка по пакетам в treemacs

 , treemacs,


0

2

Привет, ЛОР!

Я вот иногда тыкаю Intellij IDEA в поисках идей, и тут нашёл там классную штуку: IDEA умеет показывать не только традиционное дерево директорий проекта, но и разбивку по пакетам. Скажи, ЛОР, а можно ли такое же организовать в Emacs+Treemacs?

★★★★★

Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от theNamelessOne

Окей, например у тебя есть проект с вот такой структурой директорий:

.
├── app
│   ├── app.cabal
│   ├── CHANGELOG.md
│   ├── LICENSE
│   └── src
│       └── Main.hs
├── libs
│   ├── libX
│   │   ├── CHANGELOG.md
│   │   ├── libX.cabal
│   │   ├── LICENSE
│   │   ├── src
│   │   │   └── MyLib.hs
│   │   └── test
│   │       └── Main.hs
│   └── libY
│       ├── CHANGELOG.md
│       ├── libY.cabal
│       ├── LICENSE
│       └── src
│           └── MyLib.hs
├── stack.yaml
└── stack.yaml.lock

IDEA здесь будет показывать libX/Y на верхнем уровне, а не в поддиректории. Вот так: https://ibb.co/QjH1qSZ

Естественно, работает это только для недоязычков, в которых есть такая сущность как пакет.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

помню как файл называется

Зачем его помнить? Во-первых нормальные люди распихивают файлы неймспейсов по соответствующим каталогам. Во-вторых ищешь по namespace ... или как там в конкретном языке.

no-such-file ★★★★★
()
Ответ на: комментарий от hateyoufeel

Не пользовался treemacs, но у них в README написано:

Treemacs can be extended to display arbitrary nodes as well as be used as a general rendering backend for any tree-like structures. See here for an extended tutorial and demonstration.

Т.е. похоже на то, что можно, но скорее всего придётся пилить самому (вряд ли есть готовые расширения). Для твоего Haskell-проекта читаешь список либ из libs (или достаёшь из языкового сервера, если он это поддерживает), добавляешь их и их «детей» в дерево как ноды (пример есть по ссылке выше). Плюс, наверно, ты ещё хочешь скрывать эти ноды из обычного файлового дерева, если файловое дерево и «разбивка по пакетам» показываются одновременно (чтобы у тебя не дублировались libs/libX и libX) — возможно, под это есть какие-нибудь хуки. Может быть получится решить как-то проще — тут нужно разбираться, как оно работает, я это делать не буду, лучше спроси у автора.

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 5)
Ответ на: комментарий от theNamelessOne

(вряд ли есть готовые расширения).

Вот меня это в первую очередь интересовало.

Для твоего Haskell-проекта читаешь список либ из libs (или достаёшь из языкового сервера, если он это поддерживает)

Да нет, можно просто из stack.yaml список достать.

Плюс, наверно, ты ещё хочешь скрывать эти ноды из обычного файлового дерева, если файловое дерево и «разбивка по пакетам» показываются одновременно

IDEA основное дерево просто отдельным пунктом выводит. Что в принципе норм.

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от hateyoufeel

Да нет, можно просто из stack.yaml список достать.

Нужно будет тянуть парсер YAML или пилить свой ad-hoc парсер на коленке для этой задачи (что скорее всего будет легко, но может привести к поломкам на граничных случаях).

IDEA основное дерево просто отдельным пунктом выводит. Что в принципе норм.

Ну тогда после беглого прочтения тьюториала выглядит так, как будто сделать будет несложно: добавляешь ноды для пакетов, а для их «детей» (файлов и поддиректорий в пакетах) переиспользуешь готовые :child-type и :children от файлового дерева.

theNamelessOne ★★★★★
()