Skip to content

Commit fa76f77

Browse files
committed
fix: fix builtin type handling and method name pattern
1 parent 4cbe7f6 commit fa76f77

File tree

11 files changed

+9763
-8689
lines changed

11 files changed

+9763
-8689
lines changed

Diff for: builtin.rbs

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
HOO: some
2+
FOO: boolean
3+
HOGE: bool

Diff for: grammar.js

+23-6
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ module.exports = grammar({
1818

1919
constant: $ => /[A-Z]\w*/,
2020
interface: $ => /_[A-Z]\w*/,
21-
variable: $ => token(prec(-1, /[a-z]\w*/)),
2221

2322
self: $ => "self",
2423

@@ -75,7 +74,7 @@ module.exports = grammar({
7574

7675
class_name: $ => seq(optional($.namespace), $.constant),
7776
interface_name: $ => seq(optional($.namespace), $.interface),
78-
alias_name: $ => seq(optional($.namespace), $.variable),
77+
alias_name: $ => seq(optional($.namespace), $.identifier),
7978

8079
type_variable: $ => $.constant,
8180

@@ -294,9 +293,9 @@ module.exports = grammar({
294293
method_type_parameters: $ => seq("[", commaSep1($.type_variable), "]"),
295294

296295
attribute_member: $ => choice(
297-
seq(optional($.visibility), $.attribyte_type, $.method_name, ":", $.type),
298-
seq(optional($.visibility), $.attribyte_type, $.method_name, "(", $.ivar_name, ")", ":", $.type),
299-
seq(optional($.visibility), $.attribyte_type, $.method_name, "()", ":", $.type),
296+
seq(optional($.visibility), $.attribyte_type, optional(seq($.self, ".")), $.method_name, ":", $.type),
297+
seq(optional($.visibility), $.attribyte_type, optional(seq($.self, ".")), $.method_name, "(", $.ivar_name, ")", ":", $.type),
298+
seq(optional($.visibility), $.attribyte_type, optional(seq($.self, ".")), $.method_name, "()", ":", $.type),
300299
),
301300

302301
visibility_member : $ => seq($.visibility, token.immediate(/\n/)),
@@ -328,7 +327,25 @@ module.exports = grammar({
328327

329328
ivar_name: $ => /@[a-zA-Z]\w+/,
330329
cvar_name: $ => /@@[a-zA-Z]\w+/,
331-
method_name: $ => $.identifier,
330+
331+
operator: $ => choice(
332+
'..', '|', '^', '&', '<=>', '==', '===', '=~', '>', '>=', '<', '<=', '+',
333+
'-', '*', '/', '%', '!', '!~', '**', '<<', '>>', '~', '+@', '-@', '~@', '[]', '[]=', '`'
334+
),
335+
336+
setter: $ => seq(field('name', $.identifier), token.immediate('=')),
337+
identifier_suffix: $ => seq($.identifier, token.immediate('?')),
338+
constant_suffix: $ => seq($.constant, token.immediate('?')),
339+
340+
method_name: $ => choice(
341+
$.identifier,
342+
$.identifier_suffix,
343+
$.constant,
344+
$.constant_suffix,
345+
$.setter,
346+
$.operator,
347+
/`[^`]+`/,
348+
),
332349

333350
identifier: $ => token(seq(LOWER_ALPHA_CHAR, IDENTIFIER_CHARS)),
334351
}

Diff for: queries/rbs/highlights.scm

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
(class_name (constant) @type)
5454
(module_name (constant) @type)
5555
(interface_name (interface) @type)
56-
(alias_name (variable) @type)
56+
(alias_name (identifier) @type)
5757
(type_variable) @constant
5858
(namespace (constant) @constant)
5959

Diff for: src/grammar.json

+268-14
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,6 @@
2929
"type": "PATTERN",
3030
"value": "_[A-Z]\\w*"
3131
},
32-
"variable": {
33-
"type": "TOKEN",
34-
"content": {
35-
"type": "PREC",
36-
"value": -1,
37-
"content": {
38-
"type": "PATTERN",
39-
"value": "[a-z]\\w*"
40-
}
41-
}
42-
},
4332
"self": {
4433
"type": "STRING",
4534
"value": "self"
@@ -551,7 +540,7 @@
551540
},
552541
{
553542
"type": "SYMBOL",
554-
"name": "variable"
543+
"name": "identifier"
555544
}
556545
]
557546
},
@@ -2533,6 +2522,27 @@
25332522
"type": "SYMBOL",
25342523
"name": "attribyte_type"
25352524
},
2525+
{
2526+
"type": "CHOICE",
2527+
"members": [
2528+
{
2529+
"type": "SEQ",
2530+
"members": [
2531+
{
2532+
"type": "SYMBOL",
2533+
"name": "self"
2534+
},
2535+
{
2536+
"type": "STRING",
2537+
"value": "."
2538+
}
2539+
]
2540+
},
2541+
{
2542+
"type": "BLANK"
2543+
}
2544+
]
2545+
},
25362546
{
25372547
"type": "SYMBOL",
25382548
"name": "method_name"
@@ -2566,6 +2576,27 @@
25662576
"type": "SYMBOL",
25672577
"name": "attribyte_type"
25682578
},
2579+
{
2580+
"type": "CHOICE",
2581+
"members": [
2582+
{
2583+
"type": "SEQ",
2584+
"members": [
2585+
{
2586+
"type": "SYMBOL",
2587+
"name": "self"
2588+
},
2589+
{
2590+
"type": "STRING",
2591+
"value": "."
2592+
}
2593+
]
2594+
},
2595+
{
2596+
"type": "BLANK"
2597+
}
2598+
]
2599+
},
25692600
{
25702601
"type": "SYMBOL",
25712602
"name": "method_name"
@@ -2611,6 +2642,27 @@
26112642
"type": "SYMBOL",
26122643
"name": "attribyte_type"
26132644
},
2645+
{
2646+
"type": "CHOICE",
2647+
"members": [
2648+
{
2649+
"type": "SEQ",
2650+
"members": [
2651+
{
2652+
"type": "SYMBOL",
2653+
"name": "self"
2654+
},
2655+
{
2656+
"type": "STRING",
2657+
"value": "."
2658+
}
2659+
]
2660+
},
2661+
{
2662+
"type": "BLANK"
2663+
}
2664+
]
2665+
},
26142666
{
26152667
"type": "SYMBOL",
26162668
"name": "method_name"
@@ -2922,9 +2974,211 @@
29222974
"type": "PATTERN",
29232975
"value": "@@[a-zA-Z]\\w+"
29242976
},
2977+
"operator": {
2978+
"type": "CHOICE",
2979+
"members": [
2980+
{
2981+
"type": "STRING",
2982+
"value": ".."
2983+
},
2984+
{
2985+
"type": "STRING",
2986+
"value": "|"
2987+
},
2988+
{
2989+
"type": "STRING",
2990+
"value": "^"
2991+
},
2992+
{
2993+
"type": "STRING",
2994+
"value": "&"
2995+
},
2996+
{
2997+
"type": "STRING",
2998+
"value": "<=>"
2999+
},
3000+
{
3001+
"type": "STRING",
3002+
"value": "=="
3003+
},
3004+
{
3005+
"type": "STRING",
3006+
"value": "==="
3007+
},
3008+
{
3009+
"type": "STRING",
3010+
"value": "=~"
3011+
},
3012+
{
3013+
"type": "STRING",
3014+
"value": ">"
3015+
},
3016+
{
3017+
"type": "STRING",
3018+
"value": ">="
3019+
},
3020+
{
3021+
"type": "STRING",
3022+
"value": "<"
3023+
},
3024+
{
3025+
"type": "STRING",
3026+
"value": "<="
3027+
},
3028+
{
3029+
"type": "STRING",
3030+
"value": "+"
3031+
},
3032+
{
3033+
"type": "STRING",
3034+
"value": "-"
3035+
},
3036+
{
3037+
"type": "STRING",
3038+
"value": "*"
3039+
},
3040+
{
3041+
"type": "STRING",
3042+
"value": "/"
3043+
},
3044+
{
3045+
"type": "STRING",
3046+
"value": "%"
3047+
},
3048+
{
3049+
"type": "STRING",
3050+
"value": "!"
3051+
},
3052+
{
3053+
"type": "STRING",
3054+
"value": "!~"
3055+
},
3056+
{
3057+
"type": "STRING",
3058+
"value": "**"
3059+
},
3060+
{
3061+
"type": "STRING",
3062+
"value": "<<"
3063+
},
3064+
{
3065+
"type": "STRING",
3066+
"value": ">>"
3067+
},
3068+
{
3069+
"type": "STRING",
3070+
"value": "~"
3071+
},
3072+
{
3073+
"type": "STRING",
3074+
"value": "+@"
3075+
},
3076+
{
3077+
"type": "STRING",
3078+
"value": "-@"
3079+
},
3080+
{
3081+
"type": "STRING",
3082+
"value": "~@"
3083+
},
3084+
{
3085+
"type": "STRING",
3086+
"value": "[]"
3087+
},
3088+
{
3089+
"type": "STRING",
3090+
"value": "[]="
3091+
},
3092+
{
3093+
"type": "STRING",
3094+
"value": "`"
3095+
}
3096+
]
3097+
},
3098+
"setter": {
3099+
"type": "SEQ",
3100+
"members": [
3101+
{
3102+
"type": "FIELD",
3103+
"name": "name",
3104+
"content": {
3105+
"type": "SYMBOL",
3106+
"name": "identifier"
3107+
}
3108+
},
3109+
{
3110+
"type": "IMMEDIATE_TOKEN",
3111+
"content": {
3112+
"type": "STRING",
3113+
"value": "="
3114+
}
3115+
}
3116+
]
3117+
},
3118+
"identifier_suffix": {
3119+
"type": "SEQ",
3120+
"members": [
3121+
{
3122+
"type": "SYMBOL",
3123+
"name": "identifier"
3124+
},
3125+
{
3126+
"type": "IMMEDIATE_TOKEN",
3127+
"content": {
3128+
"type": "STRING",
3129+
"value": "?"
3130+
}
3131+
}
3132+
]
3133+
},
3134+
"constant_suffix": {
3135+
"type": "SEQ",
3136+
"members": [
3137+
{
3138+
"type": "SYMBOL",
3139+
"name": "constant"
3140+
},
3141+
{
3142+
"type": "IMMEDIATE_TOKEN",
3143+
"content": {
3144+
"type": "STRING",
3145+
"value": "?"
3146+
}
3147+
}
3148+
]
3149+
},
29253150
"method_name": {
2926-
"type": "SYMBOL",
2927-
"name": "identifier"
3151+
"type": "CHOICE",
3152+
"members": [
3153+
{
3154+
"type": "SYMBOL",
3155+
"name": "identifier"
3156+
},
3157+
{
3158+
"type": "SYMBOL",
3159+
"name": "identifier_suffix"
3160+
},
3161+
{
3162+
"type": "SYMBOL",
3163+
"name": "constant"
3164+
},
3165+
{
3166+
"type": "SYMBOL",
3167+
"name": "constant_suffix"
3168+
},
3169+
{
3170+
"type": "SYMBOL",
3171+
"name": "setter"
3172+
},
3173+
{
3174+
"type": "SYMBOL",
3175+
"name": "operator"
3176+
},
3177+
{
3178+
"type": "PATTERN",
3179+
"value": "`[^`]+`"
3180+
}
3181+
]
29283182
},
29293183
"identifier": {
29303184
"type": "TOKEN",

0 commit comments

Comments
 (0)