forked from saros-project/saros
-
Notifications
You must be signed in to change notification settings - Fork 0
/
primer.chralx
78 lines (56 loc) · 2.14 KB
/
primer.chralx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
-- root foo:bar
1. Overview
This is a literate programming architecture DSL
written in Archnemesis. The file extension chralx
is a tribute to Christopher Alexander.
You can use this language to define constraints on
the architecture of your project. If your project
uses Sonarqube, you can use this DSL together with
https://github.com/saros-project/archnemesis-sonar-rule
for architecture compliance checking.
2. Syntax & Semantics
A program written in the style of literate programming
consists of two parts, essay and tangled code.
What you are reading now is essay.
2.1 Essay
Every sentence must start with a capital letter
and end with a stop, an exclamation mark or a
question mark! Is that clear?
Headlines are ok to start with a number and not
have a punctutation mark at the end, however they
must always be followed with an empty line. As you can
see in the headlines here.
Also writing things such as
1. lists and
* enumerations
is possible.
2.2 Tangle
Tangled code is prefixed with a "--" followed by a space.
In the example below we see a component declaration,
this means there is a component named net, which
represents the "bar.network" package (and all it's subpackages)
and a component named business, which represents the
"bar.business" and "bar.logic" packages.
-- component net
+= bar.network
-- component business
+= bar.logic
+= bar.business
To enable access between components we use connectors.
A connector consists of the names of two components
connected by a rightarrow ("=>").
-- business => net
In the example above we say basically say that "bar.logic"
and "bar.business" are allowed to depend on "bar.network"
but not vice versa.
If we would like to additionally enable net to access
business, we can use the leftright arrow ("<=>") like
here
-- business <=> net
3. Other semantics
If two components are declared in this file, yet are in
no relation, that means that they are not allowed to access
each other. This raises an issue in Sonarqube.
If some packages of the project are not part of a component
these packages will be ignored during the analysis. That
means they can access anything they want.