Skip to content

Commit dc53db3

Browse files
committed
Добавлено больше howto в статью про Dune
1 parent 2c64286 commit dc53db3

File tree

3 files changed

+66
-34
lines changed

3 files changed

+66
-34
lines changed
563 KB
Loading

docs/tools/dune.md

Lines changed: 57 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,44 +2,47 @@
22

33
**Dune** - самое популярное решение для сборки OCaml-проектов, оно глубоко интегрировано в экосистему языка, обладает современным функционалом (на подобие инкрементальной сборки, параллельности) и позволяет собирать как исполняемые программы, так и библиотеки, вызывать тесты.
44

5-
- [Quick start](https://dune.readthedocs.io/en/stable/quick-start.html)
5+
> [!NOTE] Документация
6+
>
7+
> - [Официальный сайт проекта](https://dune.build)
8+
> - Стартовый туториал [Quick start](https://dune.readthedocs.io/en/stable/quick-start.html)
69
7-
Стоит понимать, Dune не занимается управлением пакетами (сторонних библиотек), она способна только их подключать.
8-
Для управления же используется пакетный менеджер [OPAM](./opam.md).
10+
> [!IMPORTANT] Управление зависимостями
11+
> Стоит понимать, Dune не занимается управлением пакетами (зависимостями).
12+
> Для этого используется пакетный менеджер [OPAM](./opam.md).
913
1014
## Базовые понятия
1115

12-
Проекты Dune состоят из компонентов. Компонент может быть
16+
Разработка происходит в рамках **проекта**, корень проекта определяется по файлу `dune-project`. Проект в свою очередь состоит из **компонентов**.
1317

14-
- **Исполняемым** (executable)
15-
- **Библиотечным** (library)
16-
- **Тестом** (test)
18+
| Компонент | Описание | dune |
19+
| ---------- | ------------------------------------------ | ----------------- |
20+
| Executable | Содержит непосредственно исполняемый код | `(executable ..)` |
21+
| Library | Код для использования другими компонентами | `(library ..)` |
22+
| Test | Содержит тесты для компонентов | `(test ..)` |
1723

18-
Проект содержит один или более компонент любого типа, которые могут зависеть друг от друга.
24+
### Компоненты
1925

20-
Эти компоненты могут быть объеденины в пакеты для их последующего распространения.
26+
У компонента всегда есть имя (строфа `name`) по которому можно обращаться **внутри** проекта.
27+
Если вы хотите сделать компонент публичным, то вы должны дать ему публичное имя (строфа `public_name`) и указать в качестве пакета в `dune-project` (если требуется).
2128

22-
## Автоматическое форматирование
23-
24-
Для этого у вас должен быть установлен [`ocamlformat`](https://github.com/ocaml-ppx/ocamlformat).
29+
> [!TIP] Зависимости между компонентами
30+
> Если ваши компоненты зависят друг от друга, то явно указывайте к какому пакету они относятся.
31+
> В противном случае Dune будет выдавать ошибку с просьбой сделать подключаемый компонент публичным
32+
> при попытки подключить приватный библиотечный компонент к публичному библиотечному.
2533
26-
```sh
27-
$ opam install ocamlformat
28-
```
34+
> [!TIP] Публичные имена
35+
> Публичные имена могут содержать символ `-`, что является предпочтительным разделителем слов в названиях пакетов. Пример:
36+
>
37+
> ```dune
38+
> (library
39+
> (name cool_unix)
40+
> (public_name cool-unix))
41+
> ```
2942
30-
После чего в корень проекта добавьте файл `.ocamlformat`:
31-
32-
```sh
33-
$ touch .ocamlformat
34-
```
35-
36-
Этого достаточно, чтобы использовалось автоформатирование командами:
37-
38-
```sh
39-
$ dune fmt # или dune build @fmt
40-
```
43+
## Автоматическое форматирование
4144
42-
Для настройки профиля и версии смотрите [документацию](https://dune.readthedocs.io/en/stable/howto/formatting.html).
45+
Смотрите статью про форматтер [ocamlformat](./ocamlformat.md).
4346
4447
## Чтения файлов в тестах
4548
@@ -110,3 +113,30 @@ Dune умеет в установку скомпилированных арте
110113
> (package) stanzas do not support all opam fields or complete syntax for dependency specifications. If the package you are adapting requires this, keep the corresponding opam fields in a pkg.opam.template file. See [Packages](https://dune.readthedocs.io/en/stable/reference/packages.html).
111114
112115
Смотрите пример использования: [переопределение](https://github.com/mattjbray/ocaml-decoders/blob/master/decoders-msgpck.opam.template), [новые поля](https://github.com/dx3mod/repostbot/blob/master/repostbot.opam.template).
116+
117+
## Интеграция с LSP
118+
119+
Реализация языкового сервера OCaml использует генерируемые при сборки Dune'ой файлы для своей работы.
120+
Это можно заметить при создания нового файла, который редактор будет помечать красным с просьбой обновить кеш (то есть собрать проект для получения необходимой информации о новом файле).
121+
122+
Поэтому для повышения отзывчивости вы можете воспользоваться командой
123+
124+
```sh
125+
$ dune build @check -w
126+
```
127+
128+
## Release-сборка проекта
129+
130+
Можно так, но он вообще работает?
131+
132+
```sh
133+
$ dune build --profile release
134+
# или
135+
$ dune build release
136+
```
137+
138+
::: details Мем
139+
140+
![](../public/memes/how-to-build-release.png)
141+
142+
:::

docs/tools/ocamlformat.md

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,29 @@
11
# ocamlformat
22

3-
[ocamlformat] — инструмент для автоматического форматирование исходного кода на языке OCaml,
4-
является частью [OCaml Platform](https://ocaml.org/platform). Имеет гибкую конфигурацию и профили,
5-
умеет форматировать комментарии.
3+
[ocamlformat] — инструмент для автоматического форматирование исходного кода на языке OCaml,
4+
является частью [OCaml Platform](https://ocaml.org/platform). Имеет гибкую конфигурацию и профили,
5+
умеет форматировать комментарии.
66

77
## В Dune-проекте
88

99
Для использования форматтера в Dune-проекте необходимо в корне проекта создать файл `.ocamlformat`. Его можно оставить пустым и тогда применяться настройки по умолчанию.
1010

11-
Для вызова форматтера можно использовать команды:
11+
Для вызова форматтера используйте команды:
12+
1213
```sh
1314
$ dune fmt
1415
# или
1516
$ dune build @fmt
17+
# watch-режим форматирования
18+
$ dune fmt -w
1619
```
1720

1821
Документация: [How to Set up Automatic Formatting](https://dune.readthedocs.io/en/stable/howto/formatting.html).
1922

20-
## Вне проекта
23+
## Вне проекта
2124

2225
```sh
2326
$ ocamlformat --enable-outside-detected-project -i *.ml
2427
```
2528

26-
27-
[ocamlformat]: https://github.com/ocaml-ppx/ocamlformat
29+
[ocamlformat]: https://github.com/ocaml-ppx/ocamlformat

0 commit comments

Comments
 (0)