
Oleg
21.07.2017
14:09:13

Vasily
21.07.2017
14:09:22

Oleg
21.07.2017
14:10:21

Friedrich
21.07.2017
14:10:55
Спасибо, это хорошая идея
Нашёл: https://github.com/Microsoft/vscode/blob/1b203f70f61910973f4202c469d0bb5e3fb9ca07/src/vs/platform/markers/common/problemMatcher.ts#L1027-L1035
Веселуха, конечно, у них там :)

Google

Vasily
21.07.2017
14:11:01
Код в очень императивном стиле написан

Дед Пегас
21.07.2017
14:11:19

Oleg
21.07.2017
14:11:20

Vasily
21.07.2017
14:12:31
Если уж хочется работать с абсолютными\относительными путями, есть Uri

Friedrich
21.07.2017
14:12:35
О Омниссия, что это.
vscode умеет встраивать в себя всякие задачки — например, скомпилировать что-нибудь через msbuild. Вывод из msbuild разбирается этими регулярочками, а результаты предоставляются в отдельной вкладочке. И по ним можно кликать, чтоб переходить к строчкам в исходниках.
Мне кажется, почти любой редактор делает то же самое.
А в этом коде просто стандартный набор матчеров. Можно добавлять свои, это не хардкод.

Oleg
21.07.2017
14:14:16

Friedrich
21.07.2017
14:14:33
А покажите, про какой код вы говорите?

Vasily
21.07.2017
14:15:01

Friedrich
21.07.2017
14:15:08
Да как не надо!

Oleg
21.07.2017
14:15:20

Vasily
21.07.2017
14:15:39
Больше всего убивает Autoopen на всех модулях :(

Google

Vasily
21.07.2017
14:15:49
Фиг поймешь, где что искать

Oleg
21.07.2017
14:15:56
Давайте, давайте, топчитесь

Vasily
21.07.2017
14:17:21
Код читается очень тяжко из-за этого
Не видно связей между модулями

Oleg
21.07.2017
14:17:42
Понятно, согласен

Friedrich
21.07.2017
14:18:39
О, с модулями задумка интересная.

Oleg
21.07.2017
14:18:42
Пойду-ка вина выпью, разволновали вы меня

Vasily
21.07.2017
14:21:51
let (==>) = (<==)

Friedrich
21.07.2017
14:22:41
Когда я вижу код типа https://github.com/OlegZee/Xake/blob/5074d22c545f2efcd1644e5cfd910ea51bed3fec/core/Path.fs#L77-L95, мне хочется там каждую функцию покрыть десятком тестов. Очень опасно выглядит, нужно прям подробно тестировать.
Отмечу, что он не в очень портабельном манере сделан: например, вот эти все driveRegex не нужны на линуксе. Хотелось бы, может быть, отдельные платформенные модули для работы с путями.

Vasily
21.07.2017
14:23:10
Ну пока явно не продакшн реди

Friedrich
21.07.2017
14:23:37
Потому человек у нас совета и спрашивает :)
Я предлагаю на степени готовности кода не фокусироваться, а смотреть что есть.

Vasily
21.07.2017
14:23:53
Ну я уже загрустил

Friedrich
21.07.2017
14:24:06
В свой «продакшен» я бы такой код пустил, учитывая, какие небольшие (и несложные) задачи у меня требуют кастомной сборки.

Vasily
21.07.2017
14:24:43
let isMask (a:string) = a.IndexOfAny([|'*';'?'|]) >= 0
Наследие с++ сильно...

Friedrich
21.07.2017
14:24:54
:)

Vasily
21.07.2017
14:24:59
Я понял, что напрягает
Это с++ стиль

Friedrich
21.07.2017
14:25:15
А меня знаешь что напрягает? :)
/// <summary>

Google

Friedrich
21.07.2017
14:25:26
Это же C#-стиль!

Vasily
21.07.2017
14:25:40
Возможно

Friedrich
21.07.2017
14:25:43
(вроде, у нас можно без <summary> писать, компилятор сам добавит)
Но это придирки.

Vasily
21.07.2017
14:26:12
match x::(normalize tail) with
| Directory _::Parent::t -> t
| CurrentDir::t -> t
| _ as rest -> rest
Шоэто?

Friedrich
21.07.2017
14:26:33
На этом месте я испугался, признаться.

Vasily
21.07.2017
14:26:39
Кто объяснит?

Friedrich
21.07.2017
14:28:51
@olegzee, кстати, есть ещё по-настоящему важный и злободневный вопрос: а на Core это работает? Вроде, там сборочные файлы под десктопный фреймворк.

Vasily
21.07.2017
14:28:57
let matchByMask (rx:Regex) value =
match rx.Match(value) with
| m when m.Success ->
[for name in rx.GetGroupNames() do
let group = m.Groups.Item(name)
if name <> "0" && group.Success then yield name, group.Value] |> Some
| _ -> None

Friedrich
21.07.2017
14:29:24
https://github.com/OlegZee/Xake/blob/master/core/Tasks/Dotnet.Msbuild.fs — а вот и поддержка мсбилда, собственно.
(ну, впрочем, я списки очень не люблю, поэтому не моё)

Vasily
21.07.2017
14:30:21
Ну меджик имена
Вот это вот все

Friedrich
21.07.2017
14:30:40
А, да, "0" выглядит подозрительно.

Vasily
21.07.2017
14:30:48
Я бы сказал, очень

Friedrich
21.07.2017
14:31:04
Хотя погоди, это же название группы в регулярке.
Не особо страшно, если все эти регулярки тут рядом объявлены.

Vasily
21.07.2017
14:31:28
Опять же

Google

Vasily
21.07.2017
14:31:35
Императивный стиль

Friedrich
21.07.2017
14:31:43
Но, да, хотелось бы более descriptive название.
О, там небольшой DSL для управления процессами, как мило :)

Vasily
21.07.2017
14:33:28
ShellBuilder?

Friedrich
21.07.2017
14:33:57
https://github.com/OlegZee/Xake/blob/296b1d3971bd6189ee417261e29db4fd3bb7a98a/core/Tasks/Dotnet.Msbuild.fs#L56-L67 — вот это мне не нравится. Повторы вида
match settings.Target with
| [] -> ()
| lst -> yield "/t:" + (lst |> String.concat ";")
хотелось бы сократить.
Щас полезу искать, где там код для конкатенации списка аргументов в строку.

Vasily
21.07.2017
14:35:31
короче, там много повторов

Friedrich
21.07.2017
14:36:19
https://github.com/OlegZee/Xake/blob/296b1d3971bd6189ee417261e29db4fd3bb7a98a/core/Tasks/Shell.fs#L53-L56 — имхо, mono не стоит так вот костылями прибивать.
Хотя соглашусь, что сама иддея практична. Мне часто бывает нужно портабельно запускать какие-то бинарники на CLR и на Mono, и приходится так же вот костылять.

Oleg
21.07.2017
14:39:07

Vasily
21.07.2017
14:39:55
Я почитал, вообще не понял, что имелось в виду
Нафиг тащить внутрь команды копирования и прочего - тоже не понял

Friedrich
21.07.2017
14:40:54
А чего с ними делать?

Oleg
21.07.2017
14:40:55

Vasily
21.07.2017
14:40:56
Это внешние команды шелла

Friedrich
21.07.2017
14:41:10
Которого? :)
Было бы нормально заврапать команды шелла. Но зачем, если можно написать дотнетовую реализацию?

Vasily
21.07.2017
14:41:38
Ну который есть, того и команды

Friedrich
21.07.2017
14:41:57
Просто, ну, как я буду потом в билдфайле эти команды вызывать? Хочется портабельно.

Google

Friedrich
21.07.2017
14:42:53
Для обычных команд всё понятно, но копирование и удаление файлов требуется достаточно часто, а разница в вариантах шеллов достаточно большая, чтобы дать свои команды системы сборки для этого.
В мсбилде копирование тоже, кстати, сделано встроенным таргетом (или как там это называется).

Vasily
21.07.2017
14:43:38
Пока выглядит как сборник решенных частных проблем
В мсбилде да
Там свой Copy

Oleg
21.07.2017
14:44:35

Friedrich
21.07.2017
14:46:37
На самом деле, вполне бодренький инструмент. Да, всяких некрасивостей и несуразностей огромная куча, но
1) я считаю, что тулза полезная; мне она понравилась, и я бы даже поюзал на всяких небольших задачах вместо psake / invoke-build
2) раз много некрасивостей и несуразностей — значит, понятно, куда развивать инструмент :)
Прям вот хоть щас берись и начинай с любого конца контрибьютить.

Oleg
21.07.2017
14:47:46

Evgeniy
21.07.2017
14:47:54
На тесты и стиль.

Friedrich
21.07.2017
14:48:42
Автор утверждает, что тестами покрыто там, где я спросил.

Vasily
21.07.2017
14:49:18
Меня сильно стиль коробит - я нихрена не понимаю, что там написано. Хотя это скорее всего оттого, что я дебил :)

Friedrich
21.07.2017
14:50:05

Vasily
21.07.2017
14:50:41
В общем-то, данный код иллюстрирует одну из проблем F# - нет внятных стайлгайдов

Oleg
21.07.2017
14:50:54

Vasily
21.07.2017
14:50:59
В одном месте DSL
в другом императивный подход
Хотя что мешает написать билдер на командную строку?

Oleg
21.07.2017
14:51:38