Git Product home page Git Product logo

file-template-loader's Introduction

Улучшенный шаблонизатор для IntelliJ IDEA для генерации шаблонов, их групп и модулей. Поддерживает создание нескольких файлов, распределенных по поддиректориям и вставку кода внутрь существующих файлов. Позволяет использовать параметры, значение которых нужно вводить при создании шаблона.

Подробнее в Wiki.

file-template-loader's People

Contributors

rinekri avatar rougsig avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

lionzxy

file-template-loader's Issues

Большая вложенность в меню

При использовании плагина добавляется новый пункт в контекстном меню, но там довольно большая вложенность, из-за этого приходится протыкивать кучу пунктов.

Может, можно сделать так, чтобы это конфигурировалось как-то?
Например, пускай шаблоны показываются только для текущего рабочего проекта, даже если их несколько, тогда одну вложенность уже можно убрать. И т.д.

Исправить пути для Linux

Проблема: разделители в Linux инвертированы, и тесты не проходят. Нужно добавить поддержку обеих ОС.

Например:
\\src$directory -> /src$directory

И тут:

fun String.toPackageCase(): String {
  return toUpperCamelCase().toLowerSnakeCase()
    .split('-', '_', '/', '\\')
    .joinToString(".") { it }
}

в такое:

fun String.toPackageCase(): String {
  return toUpperCamelCase().toLowerSnakeCase()
    .split('-', '_', '/', '/')
    .joinToString(".") { it }
}

И в тесте FileTemplateCreatorTest

Вставка шаблона внутрь класса

Было бы удобно добавить функцию вставки шаблона внутрь класса в место клика.
Например, есть класс:

class Test {
   fun a() {}


   fun b() {}
}

Кликаем между функциями -> выбираем добавить шаблон, получаем:

class Test {
   fun a() {}
   
   fun c() {} 

   fun b() {}
}

fun c() {} функция из шаблона.
Учитывая что дерево класса мы получить можем, значит это должно быть реализуемо.

Указанные в модуле шаблоны не переопределяют шаблоны из группы

По идее, по правилам переопределения, шаблоны в модуле должны переопределять шаблоны из группы. Например, если в MviScrenModule допишу шаблон, который указан в MviScreenGroup (например, AndroidLayout), то он должен переопределить этот шаблон из группы.

Не получается использовать рутовый пакет вместо PACKAGE_NAME

Сейчас если использовать PACKAGE_NAME в шаблоне, то при создании группы подставляется пакет с названием директории, и достучаться до PACKAGE_NAME оригинального, без этой директории, невозможно. А это бывает полезно для R-файлов. Если попытаться создать такую переменную в миксинах, то возникает циклическая зависимость.

Некорректно работает селектор для некоторых файлов

Например, есть файл с классом:

sealed class AppRoute(override val path: String) : Route {
  object CCC : AppRoute("CCC")
  object VVV : AppRoute("VVVV")
}

Нужно добавить в конец класса, перед закрывающей скобкой. PsiTree показывает, что достаточно использовать "selector": "AppRoute CLASS CLASS_BODY", но он не добавляется.

Пришлось использовать "selector": "AppRoute CLASS_BODY LBRACE", но добавляется в начало класса.

Адекватные ошибки

Сейчас в случае каки-то ошибок при обработке файлов шаблонов выбрасывается исключение и из него ничего не понятно. Нужно реализовать нормальную обработку исключений, с нормальными текстами.

Проблема с файлами без названия (например, .gitignore)

Например, нужно создать файл .gitignore.

Создаю шаблон GitIgnore.txt.ft, а в templates прописываю:

        {
          "template": "GitIgnore.txt",
          "fileName": ".gitignore"
        }

В итоге получаю файл .gitignore.txt.
Хотя он должен быть без дополнительного расширения.
Если шаблон назвать .GitIgnore.ft, то создастся .gitignore.Gitignore.

Не хватает описаний в GUI для параметров

Было бы круто добавить в GUI описание для используемых параметров.
Например, можно было бы сделать отдельный файл descriptions.json,
В котором указывать переменные и их описание.
Описание будет добавляться, только если эта переменная есть в этом файле,
наличие этого файла не обязательно.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.