Skip to content

Commit 65bcf74

Browse files
committed
constrain (argument) definition
1 parent afbca92 commit 65bcf74

File tree

7 files changed

+67
-53
lines changed

7 files changed

+67
-53
lines changed

corpus/arguments.txt

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
argument
33
================================================================================
44
argument: {arg}
5-
argument: {arg arg}
6-
CTRL-R CTRL-R {register CTRL-F}
5+
tuple: {arg,arg}
6+
keycode: CTRL-R {CTRL-R} {register CTRL-F}
77
list of { uri:string, name: string } tables
88

99

@@ -23,7 +23,12 @@ list of { uri:string, name: string } tables
2323
(word)
2424
(keycode)
2525
(argument
26-
(word)))
26+
(word))
27+
(word)
28+
(ERROR
29+
(word))
30+
(keycode)
31+
(word))
2732
(line
2833
(word)
2934
(word)
@@ -71,6 +76,7 @@ argument in parentheses
7176
================================================================================
7277
NOT an argument
7378
================================================================================
79+
a '{' '}' block
7480
{foo "{bar}" `{baz}` |{baz| } {}
7581
foo { bar
7682
{ {} foo{{ foo{{{
@@ -92,11 +98,19 @@ EXTERNAL *netrw-externapp* {{{2
9298
(help_file
9399
(block
94100
(line
95-
(argument
96-
(word)
97-
(ERROR
98-
(word)
99-
(word)))
101+
(word)
102+
(word)
103+
(word)
104+
(ERROR
105+
(word))
106+
(word)
107+
(word)
108+
(word)
109+
(word))
110+
(line
111+
(word)
112+
(ERROR
113+
(word))
100114
(word)
101115
(codespan
102116
(word))

corpus/heading3-column_heading.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,11 +271,13 @@ buffer-diagram
271271
(word))
272272
(line
273273
(word)
274-
(word)
274+
(ERROR
275+
(word))
275276
(word))
276277
(line
277278
(word)
278-
(word)
279+
(ERROR
280+
(word))
279281
(word))
280282
(line
281283
(taglink

corpus/line_block.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,9 @@ li continues
130130
(line_li
131131
(line
132132
(word)
133-
(word)
133+
(word
134+
(ERROR
135+
(word)))
134136
(word)
135137
(word)
136138
(word))
@@ -147,7 +149,9 @@ li continues
147149
(block
148150
(line_li
149151
(line
150-
(word)
152+
(word
153+
(ERROR
154+
(word)))
151155
(word)
152156
(word))
153157
(line))

corpus/optionlink.txt

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ NOT optionlink: ' or 'x
3333
================================================================================
3434
'fillchars'
3535
stl ' ' or '^' statusline
36-
wbr ' ' windowbar
3736
tricky: ' 'yes' 's foo
3837

3938

@@ -51,11 +50,6 @@ tricky: ' 'yes' 's foo
5150
(word)
5251
(word)
5352
(word))
54-
(line
55-
(word)
56-
(word)
57-
(word)
58-
(word))
5953
(line
6054
(word)
6155
(word)
@@ -72,9 +66,8 @@ no! ','sqlKeyword'
7266
single-char '-' 'g' '보'
7367
non-ascii: '\"' '%)' '-bang' '.*\\.log' '.gitignore' '@{${\"foo\"}}'
7468
number: '04' 'ISO-10646-1' 'python3'
75-
76-
Option ' :help 'textwidth'
77-
Regular / :help /[
69+
Option ' :help 'textwidth'
70+
Regular / :help /[
7871

7972

8073
--------------------------------------------------------------------------------
@@ -101,16 +94,13 @@ number: '04' 'ISO-10646-1' 'python3'
10194
(word)
10295
(word)
10396
(word)
104-
(tag
105-
(word)
106-
(MISSING "*"))
97+
(word)
98+
(ERROR
99+
(word))
107100
(word)
108101
(word)
109102
(argument
110-
(word)
111-
(ERROR
112-
(word)
113-
(word)))
103+
(word))
114104
(word)
115105
(word))
116106
(line
@@ -119,8 +109,9 @@ number: '04' 'ISO-10646-1' 'python3'
119109
(word)
120110
(word)
121111
(word)
122-
(word)))
123-
(block
112+
(word
113+
(ERROR
114+
(word))))
124115
(line
125116
(word)
126117
(word)

corpus/taglink.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,8 @@ Note: ":autocmd" can...
150150
(line
151151
(word)
152152
(word)
153-
(word)
153+
(ERROR
154+
(word))
154155
(word))
155156
(line
156157
(word)

corpus/tags.txt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,9 @@ NOT a tag
108108
(word)
109109
(word)
110110
(word)
111-
(tag
112-
(word)
113-
(MISSING "*")))
111+
(word)
112+
(ERROR
113+
(word)))
114114
(line
115115
(word)
116116
(word)
@@ -121,16 +121,16 @@ NOT a tag
121121
(word))
122122
(line
123123
(word)
124-
(tag
125-
(word)
126-
(MISSING "*"))
124+
(word)
125+
(ERROR
126+
(word))
127127
(word)))
128128
(block
129129
(line
130130
(word)
131-
(tag
132-
(word)
133-
(MISSING "*"))
131+
(word)
132+
(ERROR
133+
(word))
134134
(word)
135135
(word)
136136
(word))))

grammar.js

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ module.exports = grammar({
6262
// Explicit special cases: these are plaintext, not errors.
6363
_word_common: () => choice(
6464
// NOT tag: isolated "*".
65-
/\*[\n\t ]/,
65+
'*',
6666
// NOT optionlink: '
6767
"'",
6868
// NOT optionlink: 'x
@@ -208,26 +208,28 @@ module.exports = grammar({
208208
optionlink: ($) => _word($, /[a-z][a-z]+/, "'", "'"),
209209
// Link to tag: |foo|
210210
taglink: ($) => _word($, choice(
211-
token.immediate(/[^|\n\t ]+/),
212-
// Special cases: |(| |{| …
213-
token.immediate('{'),
214-
token.immediate('}'),
215-
token.immediate('('),
216-
token.immediate(')'),
217-
token.immediate('`'),
218-
), '|', '|'),
211+
/[^|\n\t ]+/,
212+
// Special cases: |(| |{| …
213+
'{',
214+
'}',
215+
'(',
216+
')',
217+
'`',
218+
),
219+
'|', '|'),
219220
// Inline code (may contain whitespace!): `foo bar`
220221
codespan: ($) => _word($, /[^``\n]+/, '`', '`'),
221-
// Argument: {arg}
222-
argument: ($) => _word($, /[^{}\n\t ][^{}\n\t]*/, '{', '}'),
222+
// Argument: {arg} (no whitespace allowed)
223+
argument: ($) => _word($, /[^}\n\t ]+/, '{', '}'),
223224
},
224225
});
225226

226227
// Word delimited by special chars.
227228
// `rule` can be a rule function or regex. It is aliased to "word" because they are
228229
// semantically the same: atoms of captured plain text.
229230
function _word($, rule, c1, c2, fname) {
230-
rule = rule.test !== undefined ? token.immediate(rule) : rule
231+
// rule = rule.test ? token.immediate(rule) : rule
232+
// rule = token.immediate(rule)
231233
fname = fname ?? 'text';
232-
return seq(c1, field(fname, alias(rule, $.word)), token.immediate(c2));
234+
return seq(c1, field(fname, alias(token.immediate(prec(1, rule)), $.word)), token.immediate(c2));
233235
}

0 commit comments

Comments
 (0)