@Fsharp_chat

Страница 238 из 772
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
Код в очень императивном стиле написан

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
Если уж хочется работать с абсолютными\относительными путями, есть Uri
Я в курсе что относительные пути вычислять там проще некуда, но есть ещё **. Все равно все руками же делать, нет?

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
Давайте, давайте, топчитесь

Больше всего убивает Autoopen на всех модулях :(
Это замысел был - модули иметь, но не перегружать код скрипта open'ами. Вообще, это импровизации

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
match x::(normalize tail) with | Directory _::Parent::t -> t | CurrentDir::t -> t | _ as rest -> rest
Я это хотел выпилить пару дней назад, но в этом есть смысл, тестами это покрыто

Vasily
21.07.2017
14:39:55
Я почитал, вообще не понял, что имелось в виду

Нафиг тащить внутрь команды копирования и прочего - тоже не понял

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

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
О, там небольшой DSL для управления процессами, как мило :)
Да-эс-эли для некоторых команд-Тасков. Искал выразительную форму

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

Прям вот хоть щас берись и начинай с любого конца контрибьютить.

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

в другом императивный подход

Хотя что мешает написать билдер на командную строку?

Страница 238 из 772