pasaran / yate

Yet Another Template Engine
MIT License
214 stars 28 forks source link

CLI #145

Open pasaran opened 11 years ago

pasaran commented 11 years ago

Нужно упорядочить ключики, кажется. И кое-что в них поменять.

Обычная компиляция:

yate foo.yate

По-дефолту, результат компиляции идет в stdio.

Сохранить результат в файл:

yate foo.yate --output foo.yate.js

Сохранять AST после парсинга, чтобы не перекомпилировать неизменившиеся файлы.

yate foo.yate --ast

AST сохраняется в файл filename + '.obj' (в данном случае в foo.yate.obj).

Сохранить "объектную" информацию для модуля. Если имя модуля не равно 'main', то включается автоматически.

yate foo.yate --obj

Импортировать модули:

yate foo.yate --imports module1.yate module2.yate

Или лучше --modules? В любом случае, берется файл module1.yate, ищется рядом с ним module1.yate.obj, если его нет, то файл сперва компилируется.

Не сработает, если, скажем, a.yate импортирует b.yate, а он, в свою очередь, импортирует c.yate. Не сработает в смысле, что не удастся скомпилировать a.yate в одну команду -- сперва нужно будет скомпилировать b.yate.

Скомпилировать и сразу наложить на данные:

yate foo.yate data.js

Тоже самое, но еще и использовать внешние функции из соответствующего файла:

yate foo.yate --externals foo.externals.yate

Еще бы неплохо уметь накладывать скомпилированный шаблон на данные. Типа так:

yate foo.yate.js data.js

Но тогда нужно вводить ограничения на возможные расширения. Типа у yate-файлов всегда .yate, у скомпилированных -- всегда .yate.js.

Короткие варианты:

-o    --output
-a    --ast
-j    --obj
-i    --imports
-e    --externals
chestozo commented 11 years ago

А порядок для опций будет произвольный? Было бы круто!

pasaran commented 11 years ago

Он и сейчас произвольный.

alexeyten commented 11 years ago

Мне не нравиться жёсткая файловая зависимость. Хочется задавать имя obj-файла

alexeyten commented 11 years ago

И не нужна магия с --imports (--modules), нужно просто давать на вход имена obj-файлов.

pasaran commented 11 years ago

Мне не нравиться жёсткая файловая зависимость. Хочется задавать имя obj-файла

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

pasaran commented 11 years ago

/cc @doochik

alexeyten commented 11 years ago

А прямо так часто нужно это делать в одну команду?

pasaran commented 11 years ago

Ну всегда приятнее делать это в одну команду. Я часто тестирую примеры из командной строки.

On Tue, Jan 29, 2013 at 4:04 PM, Alexey Ten notifications@github.comwrote:

А прямо так часто нужно это делать в одну команду?

— Reply to this email directly or view it on GitHubhttps://github.com/pasaran/yate/issues/145#issuecomment-12831630.

pasaran commented 11 years ago

К слову, как это в перле работает?

2013/1/29 Sergey Nikitin nik.pasaran@gmail.com

Ну всегда приятнее делать это в одну команду. Я часто тестирую примеры из командной строки.

On Tue, Jan 29, 2013 at 4:04 PM, Alexey Ten notifications@github.comwrote:

А прямо так часто нужно это делать в одну команду?

— Reply to this email directly or view it on GitHubhttps://github.com/pasaran/yate/issues/145#issuecomment-12831630.

pasaran commented 11 years ago

Ну ок. Предположим, что оно может работать так: yate a.yate b.yate c.yate data.js. Компилируем a.yate, его obj-файл куда-нить в tmp складываем, потом компилируем b.yate вместе с a.yate.obj (b.yate.obj опять складываем в tmp), потом уже c.yate и потом все, что получилось склеиваем + runtime и накладываем на данные.

И отдельно можно сделать ключик типа:

yate a.yate --obj foo/bar/a.yate.obj
yate foo/bar/a.yate.obj b.yate

Нужно будет зафиксировать возможные расширения:

.yate
.obj
.ast
.js, .json

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

alexeyten commented 11 years ago

У тебя порядок компиляции получается зависимым от порядка аргументов. Причём для меня он абсолютно неинтуитивен. Я первым аргументом пишу главный файл, а у тебя он получается последним.

pasaran commented 11 years ago

Тогда нужен ключик --modules или --imports.

pasaran commented 11 years ago

Еще один вариант: модуль "foo" должен находиться в файле с именем "foo.yate" -- как в перле. Тогда можно будет просто в любом порядке перечислять файлы.

pasaran commented 11 years ago

И еще. В последнем варианте тогда можно вообще не указывать импортируемые модули.

pasaran commented 11 years ago

Короче, мне нравится вот такой вариант:

Как-то так.

pasaran commented 11 years ago

/cc @doochik, @alexeyten, @shirokoff, @artjock, @chestozo

alexeyten commented 11 years ago

Ну, похоже на правду. Только не нужно рекурсивного обхода. Нефиг искать файлы где попало, обычно это плохо кончается.

pasaran commented 11 years ago

Ага. Мне тоже не хочется делать рекурсивный обход. Это может затянуться в некоторых случаях.

chestozo commented 11 years ago

Я почти не пользовался CLI версией, так что со всем согласен )

doochik commented 11 years ago

а если импортируемый модуль лежит не в директории с foo ?

pasaran commented 11 years ago

Тогда пишешь что-нить типа:

yate foo.yate -L../modules/:more/modules/:...
pasaran commented 11 years ago

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

doochik commented 11 years ago

ага, тогда ок