File tree 15 files changed +649
-576
lines changed
15 files changed +649
-576
lines changed Original file line number Diff line number Diff line change @@ -423,7 +423,7 @@ pub enum ConstructionField {
423
423
pub struct ImplStatement {
424
424
pub span : Span ,
425
425
pub target : TypeAnnotation ,
426
- pub r#trait : Option < TypeAnnotation > ,
426
+ pub r#trait : TypeAnnotation ,
427
427
pub methods : Vec < ImplMethod > ,
428
428
}
429
429
Original file line number Diff line number Diff line change @@ -96,13 +96,10 @@ impl<'a> Parser<'a> {
96
96
// Consume the struct keyword.
97
97
self . consume ( ) ;
98
98
99
- let ( target, r#trait) = {
100
- let first_type = self . parse_type_annotation ( ) ?;
101
- match self . consume_if ( TokenKind :: For ) {
102
- Some ( _) => ( self . parse_type_annotation ( ) ?, Some ( first_type) ) ,
103
- None => ( first_type, None ) ,
104
- }
105
- } ;
99
+ let r#trait = self . parse_type_annotation ( ) ?;
100
+ self . consume_expect ( TokenKind :: For ) ?;
101
+ let target = self . parse_type_annotation ( ) ?;
102
+
106
103
let mut methods: Vec < ImplMethod > = Vec :: new ( ) ;
107
104
while !self . at ( TokenKind :: End ) {
108
105
let modifier = self . try_parse_visibility_modifier ( ) ;
Original file line number Diff line number Diff line change
1
+ -- -
2
+ source : crates / fuse - parser / tests / cases / mod .rs
3
+ description : " impl Test\n end\n "
4
+ expression : parsed .chunk
5
+ input_file : crates / fuse - parser / tests / cases / pass / impl - statement - 01 / case .fuse
6
+ -- -
7
+ Some (Chunk (
8
+ span : Span (
9
+ start : 0 ,
10
+ end : 14 ,
11
+ ),
12
+ body : Block (
13
+ statements : [
14
+ ImplStatement (ImplStatement (
15
+ span : Span (
16
+ start : 0 ,
17
+ end : 13 ,
18
+ ),
19
+ target : TypeAnnotation (
20
+ identifier : Identifier (
21
+ span : Span (
22
+ start : 5 ,
23
+ end : 9 ,
24
+ ),
25
+ name : Atom (" Test" ),
26
+ ),
27
+ ),
28
+ trait : None ,
29
+ methods : [],
30
+ )),
31
+ ],
32
+ ),
33
+ ))
Original file line number Diff line number Diff line change
1
+ impl Test
2
+ end
Original file line number Diff line number Diff line change
1
+ -- -
2
+ source : crates / fuse - parser / tests / cases / mod .rs
3
+ description : " impl Test\n end\n "
4
+ expression : parsed .errors
5
+ input_file : crates / fuse - parser / tests / cases / panic / impl - statement - 01 / case .fuse
6
+ -- -
7
+ [
8
+ UnexpectedTokenKindError (
9
+ token : TokenReference (
10
+ token : Token (
11
+ span : Span (
12
+ start : 10 ,
13
+ end : 13 ,
14
+ ),
15
+ kind : End ,
16
+ ),
17
+ leading_trivia : [],
18
+ trailing_trivia : [
19
+ Token (
20
+ span : Span (
21
+ start : 13 ,
22
+ end : 14 ,
23
+ ),
24
+ kind : Whitespace ,
25
+ ),
26
+ ],
27
+ ),
28
+ expected : For ,
29
+ ),
30
+ ]
Original file line number Diff line number Diff line change
1
+ -- -
2
+ source : crates / fuse - parser / tests / cases / mod .rs
3
+ description : " impl Test\n end\n "
4
+ expression : tokens
5
+ input_file : crates / fuse - parser / tests / cases / pass / impl - statement - 01 / case .fuse
6
+ -- -
7
+ [
8
+ TokenReference (
9
+ token : Token (
10
+ span : Span (
11
+ start : 0 ,
12
+ end : 4 ,
13
+ ),
14
+ kind : Impl ,
15
+ ),
16
+ leading_trivia : [],
17
+ trailing_trivia : [
18
+ Token (
19
+ span : Span (
20
+ start : 4 ,
21
+ end : 5 ,
22
+ ),
23
+ kind : Whitespace ,
24
+ ),
25
+ ],
26
+ ),
27
+ TokenReference (
28
+ token : Token (
29
+ span : Span (
30
+ start : 5 ,
31
+ end : 9 ,
32
+ ),
33
+ kind : Identifier ,
34
+ ),
35
+ leading_trivia : [],
36
+ trailing_trivia : [
37
+ Token (
38
+ span : Span (
39
+ start : 9 ,
40
+ end : 10 ,
41
+ ),
42
+ kind : Whitespace ,
43
+ ),
44
+ ],
45
+ ),
46
+ TokenReference (
47
+ token : Token (
48
+ span : Span (
49
+ start : 10 ,
50
+ end : 13 ,
51
+ ),
52
+ kind : End ,
53
+ ),
54
+ leading_trivia : [],
55
+ trailing_trivia : [
56
+ Token (
57
+ span : Span (
58
+ start : 13 ,
59
+ end : 14 ,
60
+ ),
61
+ kind : Whitespace ,
62
+ ),
63
+ ],
64
+ ),
65
+ ]
Original file line number Diff line number Diff line change 1
1
-- -
2
2
source : crates / fuse - parser / tests / cases / mod .rs
3
- description : " impl Test\n end\n "
3
+ description : " impl Trait for Test\n end\n "
4
4
expression : parsed .chunk
5
5
input_file : crates / fuse - parser / tests / cases / pass / impl - statement - 01 / case .fuse
6
6
-- -
7
7
Some (Chunk (
8
8
span : Span (
9
9
start : 0 ,
10
- end : 14 ,
10
+ end : 24 ,
11
11
),
12
12
body : Block (
13
13
statements : [
14
14
ImplStatement (ImplStatement (
15
15
span : Span (
16
16
start : 0 ,
17
- end : 13 ,
17
+ end : 23 ,
18
18
),
19
19
target : TypeAnnotation (
20
20
identifier : Identifier (
21
21
span : Span (
22
- start : 5 ,
23
- end : 9 ,
22
+ start : 15 ,
23
+ end : 19 ,
24
24
),
25
25
name : Atom (" Test" ),
26
26
),
27
27
),
28
- trait : None ,
28
+ trait : TypeAnnotation (
29
+ identifier : Identifier (
30
+ span : Span (
31
+ start : 5 ,
32
+ end : 10 ,
33
+ ),
34
+ name : Atom (" Trait" ),
35
+ ),
36
+ ),
29
37
methods : [],
30
38
)),
31
39
],
Original file line number Diff line number Diff line change 1
- impl Test
1
+ impl Trait for Test
2
2
end
Original file line number Diff line number Diff line change 1
1
-- -
2
2
source : crates / fuse - parser / tests / cases / mod .rs
3
- description : " impl Test\n end\n "
3
+ description : " impl Trait for Test\n end\n "
4
4
expression : tokens
5
- input_file : crates / fuse - parser / tests / cases / pass / impl - statement - 01 / case .fuse
5
+ input_file : crates / fuse - parser / tests / cases / pass / impl - statement - 02 / case .fuse
6
6
-- -
7
7
[
8
8
TokenReference (
@@ -28,16 +28,16 @@ input_file: crates/fuse-parser/tests/cases/pass/impl-statement-01/case.fuse
28
28
token : Token (
29
29
span : Span (
30
30
start : 5 ,
31
- end : 9 ,
31
+ end : 10 ,
32
32
),
33
33
kind : Identifier ,
34
34
),
35
35
leading_trivia : [],
36
36
trailing_trivia : [
37
37
Token (
38
38
span : Span (
39
- start : 9 ,
40
- end : 10 ,
39
+ start : 10 ,
40
+ end : 11 ,
41
41
),
42
42
kind : Whitespace ,
43
43
),
@@ -46,17 +46,55 @@ input_file: crates/fuse-parser/tests/cases/pass/impl-statement-01/case.fuse
46
46
TokenReference (
47
47
token : Token (
48
48
span : Span (
49
- start : 10 ,
50
- end : 13 ,
49
+ start : 11 ,
50
+ end : 14 ,
51
+ ),
52
+ kind : For ,
53
+ ),
54
+ leading_trivia : [],
55
+ trailing_trivia : [
56
+ Token (
57
+ span : Span (
58
+ start : 14 ,
59
+ end : 15 ,
60
+ ),
61
+ kind : Whitespace ,
62
+ ),
63
+ ],
64
+ ),
65
+ TokenReference (
66
+ token : Token (
67
+ span : Span (
68
+ start : 15 ,
69
+ end : 19 ,
70
+ ),
71
+ kind : Identifier ,
72
+ ),
73
+ leading_trivia : [],
74
+ trailing_trivia : [
75
+ Token (
76
+ span : Span (
77
+ start : 19 ,
78
+ end : 20 ,
79
+ ),
80
+ kind : Whitespace ,
81
+ ),
82
+ ],
83
+ ),
84
+ TokenReference (
85
+ token : Token (
86
+ span : Span (
87
+ start : 20 ,
88
+ end : 23 ,
51
89
),
52
90
kind : End ,
53
91
),
54
92
leading_trivia : [],
55
93
trailing_trivia : [
56
94
Token (
57
95
span : Span (
58
- start : 13 ,
59
- end : 14 ,
96
+ start : 23 ,
97
+ end : 24 ,
60
98
),
61
99
kind : Whitespace ,
62
100
),
You can’t perform that action at this time.
0 commit comments