Skip to content

Commit b6a7360

Browse files
authored
Merge pull request #17 from KornelH/otp_27_docstring_comment
Highlight module and function docstrings as comments
2 parents 7672011 + 6115175 commit b6a7360

File tree

5 files changed

+834
-86
lines changed

5 files changed

+834
-86
lines changed

Erlang.plist

Lines changed: 212 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@
4242
<key>include</key>
4343
<string>#macro-directive</string>
4444
</dict>
45+
<dict>
46+
<key>include</key>
47+
<string>#doc-directive</string>
48+
</dict>
4549
<dict>
4650
<key>include</key>
4751
<string>#directive</string>
@@ -536,6 +540,82 @@
536540
</dict>
537541
</array>
538542
</dict>
543+
<key>doc-directive</key>
544+
<dict>
545+
<key>begin</key>
546+
<string>^\s*+(-)\s*+((module)?doc)\s*([(]\s*)?(~[bBsS]?)?((["]{3,})\s*)(\S.*)?$</string>
547+
<key>beginCaptures</key>
548+
<dict>
549+
<key>1</key>
550+
<dict>
551+
<key>name</key>
552+
<string>punctuation.section.directive.begin.erlang</string>
553+
</dict>
554+
<key>2</key>
555+
<dict>
556+
<key>name</key>
557+
<string>keyword.control.directive.doc.erlang</string>
558+
</dict>
559+
<key>4</key>
560+
<dict>
561+
<key>name</key>
562+
<string>punctuation.definition.parameters.begin.erlang</string>
563+
</dict>
564+
<key>5</key>
565+
<dict>
566+
<key>name</key>
567+
<string>storage.type.string.erlang</string>
568+
</dict>
569+
<key>6</key>
570+
<dict>
571+
<key>name</key>
572+
<string>comment.block.documentation.erlang</string>
573+
</dict>
574+
<key>7</key>
575+
<dict>
576+
<key>name</key>
577+
<string>punctuation.definition.string.begin.erlang</string>
578+
</dict>
579+
<key>8</key>
580+
<dict>
581+
<key>name</key>
582+
<string>invalid.illegal.string.erlang</string>
583+
</dict>
584+
</dict>
585+
<key>end</key>
586+
<string>^(\s*(\7))\s*([)]\s*)?(\.)</string>
587+
<key>endCaptures</key>
588+
<dict>
589+
<key>1</key>
590+
<dict>
591+
<key>name</key>
592+
<string>comment.block.documentation.erlang</string>
593+
</dict>
594+
<key>2</key>
595+
<dict>
596+
<key>name</key>
597+
<string>punctuation.definition.string.end.erlang</string>
598+
</dict>
599+
<key>3</key>
600+
<dict>
601+
<key>name</key>
602+
<string>punctuation.section.directive.end.Erlang</string>
603+
</dict>
604+
</dict>
605+
<key>name</key>
606+
<string>meta.directive.doc.erlang</string>
607+
<key>patterns</key>
608+
<array>
609+
<dict>
610+
<key>begin</key>
611+
<string>\G</string>
612+
<key>contentName</key>
613+
<string>comment.block.documentation.erlang</string>
614+
<key>while</key>
615+
<string>(^)(?!\s*(\5))</string>
616+
</dict>
617+
</array>
618+
</dict>
539619
<key>docstring</key>
540620
<dict>
541621
<key>begin</key>
@@ -577,6 +657,13 @@
577657
</dict>
578658
<key>name</key>
579659
<string>string.quoted.triple.erlang</string>
660+
<key>patterns</key>
661+
<array>
662+
<dict>
663+
<key>include</key>
664+
<string>#internal-string-body-verbatim</string>
665+
</dict>
666+
</array>
580667
</dict>
581668
<key>everything-else</key>
582669
<dict>
@@ -646,6 +733,10 @@
646733
<key>include</key>
647734
<string>#sigil-docstring</string>
648735
</dict>
736+
<dict>
737+
<key>include</key>
738+
<string>#sigil-docstring-verbatim</string>
739+
</dict>
649740
<dict>
650741
<key>include</key>
651742
<string>#sigil-string</string>
@@ -1656,6 +1747,16 @@
16561747
<key>name</key>
16571748
<string>invalid.illegal.string.erlang</string>
16581749
</dict>
1750+
<dict>
1751+
<key>include</key>
1752+
<string>#internal-string-body-verbatim</string>
1753+
</dict>
1754+
</array>
1755+
</dict>
1756+
<key>internal-string-body-verbatim</key>
1757+
<dict>
1758+
<key>patterns</key>
1759+
<array>
16591760
<dict>
16601761
<key>captures</key>
16611762
<dict>
@@ -2691,7 +2792,7 @@
26912792
<key>sigil-docstring</key>
26922793
<dict>
26932794
<key>begin</key>
2694-
<string>(~[bBsS]?)((["]{3,})\s*)(\S.*)?$</string>
2795+
<string>(~[bs])((["]{3,})\s*)(\S.*)?$</string>
26952796
<key>beginCaptures</key>
26962797
<dict>
26972798
<key>1</key>
@@ -2734,6 +2835,67 @@
27342835
</dict>
27352836
<key>name</key>
27362837
<string>string.quoted.tripple.sigil.erlang</string>
2838+
<key>patterns</key>
2839+
<array>
2840+
<dict>
2841+
<key>include</key>
2842+
<string>#internal-string-body</string>
2843+
</dict>
2844+
</array>
2845+
</dict>
2846+
<key>sigil-docstring-verbatim</key>
2847+
<dict>
2848+
<key>begin</key>
2849+
<string>(~[BS]?)((["]{3,})\s*)(\S.*)?$</string>
2850+
<key>beginCaptures</key>
2851+
<dict>
2852+
<key>1</key>
2853+
<dict>
2854+
<key>name</key>
2855+
<string>storage.type.string.erlang</string>
2856+
</dict>
2857+
<key>2</key>
2858+
<dict>
2859+
<key>name</key>
2860+
<string>meta.string.quoted.triple.begin.erlang</string>
2861+
</dict>
2862+
<key>3</key>
2863+
<dict>
2864+
<key>name</key>
2865+
<string>punctuation.definition.string.begin.erlang</string>
2866+
</dict>
2867+
<key>4</key>
2868+
<dict>
2869+
<key>name</key>
2870+
<string>invalid.illegal.string.erlang</string>
2871+
</dict>
2872+
</dict>
2873+
<key>comment</key>
2874+
<string>Only whitespace characters are allowed after the beggining and before the closing sequences and those cannot be in the same line</string>
2875+
<key>end</key>
2876+
<string>^(\s*(\3))(?!")</string>
2877+
<key>endCaptures</key>
2878+
<dict>
2879+
<key>1</key>
2880+
<dict>
2881+
<key>name</key>
2882+
<string>meta.string.quoted.triple.end.erlang</string>
2883+
</dict>
2884+
<key>2</key>
2885+
<dict>
2886+
<key>name</key>
2887+
<string>punctuation.definition.string.end.erlang</string>
2888+
</dict>
2889+
</dict>
2890+
<key>name</key>
2891+
<string>string.quoted.tripple.sigil.erlang</string>
2892+
<key>patterns</key>
2893+
<array>
2894+
<dict>
2895+
<key>include</key>
2896+
<string>#internal-string-body-verbatim</string>
2897+
</dict>
2898+
</array>
27372899
</dict>
27382900
<key>sigil-string</key>
27392901
<dict>
@@ -2863,6 +3025,13 @@
28633025
</dict>
28643026
<key>name</key>
28653027
<string>string.quoted.curly-brackets.sigil.erlang</string>
3028+
<key>patterns</key>
3029+
<array>
3030+
<dict>
3031+
<key>include</key>
3032+
<string>#internal-string-body-verbatim</string>
3033+
</dict>
3034+
</array>
28663035
</dict>
28673036
<key>sigil-string-double-quote</key>
28683037
<dict>
@@ -2930,6 +3099,13 @@
29303099
</dict>
29313100
<key>name</key>
29323101
<string>string.quoted.double.sigil.erlang</string>
3102+
<key>patterns</key>
3103+
<array>
3104+
<dict>
3105+
<key>include</key>
3106+
<string>#internal-string-body-verbatim</string>
3107+
</dict>
3108+
</array>
29333109
</dict>
29343110
<key>sigil-string-less-greater</key>
29353111
<dict>
@@ -2997,6 +3173,13 @@
29973173
</dict>
29983174
<key>name</key>
29993175
<string>string.quoted.less-greater.sigil.erlang</string>
3176+
<key>patterns</key>
3177+
<array>
3178+
<dict>
3179+
<key>include</key>
3180+
<string>#internal-string-body-verbatim</string>
3181+
</dict>
3182+
</array>
30003183
</dict>
30013184
<key>sigil-string-parenthesis</key>
30023185
<dict>
@@ -3064,6 +3247,13 @@
30643247
</dict>
30653248
<key>name</key>
30663249
<string>string.quoted.parenthesis.sigil.erlang</string>
3250+
<key>patterns</key>
3251+
<array>
3252+
<dict>
3253+
<key>include</key>
3254+
<string>#internal-string-body-verbatim</string>
3255+
</dict>
3256+
</array>
30673257
</dict>
30683258
<key>sigil-string-single-character</key>
30693259
<dict>
@@ -3131,6 +3321,13 @@
31313321
</dict>
31323322
<key>name</key>
31333323
<string>string.quoted.other.sigil.erlang</string>
3324+
<key>patterns</key>
3325+
<array>
3326+
<dict>
3327+
<key>include</key>
3328+
<string>#internal-string-body-verbatim</string>
3329+
</dict>
3330+
</array>
31343331
</dict>
31353332
<key>sigil-string-single-quote</key>
31363333
<dict>
@@ -3198,6 +3395,13 @@
31983395
</dict>
31993396
<key>name</key>
32003397
<string>string.quoted.single.sigil.erlang</string>
3398+
<key>patterns</key>
3399+
<array>
3400+
<dict>
3401+
<key>include</key>
3402+
<string>#internal-string-body-verbatim</string>
3403+
</dict>
3404+
</array>
32013405
</dict>
32023406
<key>sigil-string-square-brackets</key>
32033407
<dict>
@@ -3265,6 +3469,13 @@
32653469
</dict>
32663470
<key>name</key>
32673471
<string>string.quoted.square-brackets.sigil.erlang</string>
3472+
<key>patterns</key>
3473+
<array>
3474+
<dict>
3475+
<key>include</key>
3476+
<string>#internal-string-body-verbatim</string>
3477+
</dict>
3478+
</array>
32683479
</dict>
32693480
<key>string</key>
32703481
<dict>

tests/snap/docstring.erl

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
-module(docstring).
2+
-moduledoc """
3+
Triple quoted strings examples
4+
""".
25

3-
-export([f/0]).
6+
-export([f1/0, f2/0, f3/0, f4/0, f5/0,
7+
g1/0, g2/0, g3/0, g4/0, g5/0]).
8+
9+
%% -doc attributes without parentheses
410

511
-doc """
612
Docstring examples
713
""".
8-
f() ->
14+
f1() ->
915
"""
1016
Line "1"
1117
Line "2"
@@ -24,10 +30,45 @@ Not escaped: \"\\t \\r \\xFF\" and \"\"\"
2430

2531
"""""
2632
""""
27-
FIXME: previous line is not a closing delimiter because opening-closing delimiter have five double quote characters
33+
previous line is not a closing delimiter because opening-closing delimiter have five double quote characters
2834
""""" = "\"\"\"\"",
2935
X = lists:seq(1,3), % just to check is syntax highlight is still ok
3036

3137
ok.
3238

39+
-doc ~s"""""
40+
Hello\n
41+
""""".
42+
f2() -> ok.
43+
44+
-doc "Hello\n".
45+
f3() -> ok.
46+
47+
-doc ~s"Hello\n".
48+
f4() -> ok.
49+
50+
-doc <<"Hello\n"/utf8>>.
51+
f5() -> ok.
52+
53+
%% -doc attributes with parentheses
54+
55+
-doc("""
56+
Hello\n
57+
""").
58+
g1() -> ok.
59+
60+
-doc(~B"""""
61+
Hello\n
62+
""""").
63+
g2() -> ok.
64+
65+
-doc("Hello\n").
66+
g3() -> ok.
67+
68+
-doc(~B"Hello\n").
69+
g4() -> ok.
70+
71+
-doc(<<"Hello\n"/utf8>>).
72+
g5() -> ok.
73+
3374
-define(THIS_IS_THE_END, "end"). % just to check is syntax highlight is still ok

0 commit comments

Comments
 (0)