code-ruby-parser 0.1.8 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/code-ruby-parser.gemspec +3 -1
  3. data/lib/code-ruby-parser.rb +1 -7
  4. data/lib/template-ruby-parser.rb +1 -7
  5. data/template-ruby-parser.gemspec +3 -1
  6. metadata +18 -137
  7. data/.overcommit.yml +0 -4
  8. data/CHANGELOG.md +0 -35
  9. data/Gemfile +0 -5
  10. data/Gemfile.lock +0 -32
  11. data/bin/code-parser +0 -27
  12. data/bin/deploy +0 -16
  13. data/bin/format +0 -3
  14. data/bin/parse-docs +0 -6
  15. data/bin/template-parser +0 -27
  16. data/docs/class.code +0 -9
  17. data/docs/meetup.code +0 -14
  18. data/docs/precedence.code +0 -1
  19. data/docs/precedence.template +0 -35
  20. data/docs/rain.code +0 -23
  21. data/docs/slack.code +0 -17
  22. data/docs/stripe.code +0 -7
  23. data/docs/twitter.code +0 -7
  24. data/lib/code/parser/addition.rb +0 -13
  25. data/lib/code/parser/and_operator.rb +0 -13
  26. data/lib/code/parser/bitwise_and.rb +0 -13
  27. data/lib/code/parser/bitwise_or.rb +0 -13
  28. data/lib/code/parser/boolean.rb +0 -13
  29. data/lib/code/parser/call.rb +0 -183
  30. data/lib/code/parser/chained_call.rb +0 -41
  31. data/lib/code/parser/class.rb +0 -55
  32. data/lib/code/parser/code.rb +0 -20
  33. data/lib/code/parser/comments.rb +0 -46
  34. data/lib/code/parser/dictionnary.rb +0 -52
  35. data/lib/code/parser/equal.rb +0 -68
  36. data/lib/code/parser/equality.rb +0 -20
  37. data/lib/code/parser/error/syntax_error.rb +0 -36
  38. data/lib/code/parser/error.rb +0 -6
  39. data/lib/code/parser/function.rb +0 -118
  40. data/lib/code/parser/greater_than.rb +0 -13
  41. data/lib/code/parser/group.rb +0 -15
  42. data/lib/code/parser/if.rb +0 -81
  43. data/lib/code/parser/if_modifier.rb +0 -39
  44. data/lib/code/parser/list.rb +0 -20
  45. data/lib/code/parser/multiplication.rb +0 -13
  46. data/lib/code/parser/name.rb +0 -14
  47. data/lib/code/parser/negation.rb +0 -18
  48. data/lib/code/parser/not_keyword.rb +0 -26
  49. data/lib/code/parser/nothing.rb +0 -13
  50. data/lib/code/parser/number.rb +0 -57
  51. data/lib/code/parser/operation.rb +0 -65
  52. data/lib/code/parser/or_keyword.rb +0 -13
  53. data/lib/code/parser/or_operator.rb +0 -13
  54. data/lib/code/parser/power.rb +0 -33
  55. data/lib/code/parser/range.rb +0 -13
  56. data/lib/code/parser/rescue.rb +0 -38
  57. data/lib/code/parser/shift.rb +0 -13
  58. data/lib/code/parser/splat.rb +0 -35
  59. data/lib/code/parser/statement.rb +0 -9
  60. data/lib/code/parser/string.rb +0 -62
  61. data/lib/code/parser/ternary.rb +0 -73
  62. data/lib/code/parser/unary_minus.rb +0 -23
  63. data/lib/code/parser/while.rb +0 -36
  64. data/lib/code/parser.rb +0 -238
  65. data/lib/code.rb +0 -2
  66. data/lib/template/parser.rb +0 -32
  67. data/lib/template.rb +0 -2
  68. data/spec/code/parser/addition_spec.rb +0 -26
  69. data/spec/code/parser/and_operator_spec.rb +0 -26
  70. data/spec/code/parser/bitwise_and_spec.rb +0 -26
  71. data/spec/code/parser/bitwise_or_spec.rb +0 -26
  72. data/spec/code/parser/boolean_spec.rb +0 -13
  73. data/spec/code/parser/call_spec.rb +0 -52
  74. data/spec/code/parser/chained_call_spec.rb +0 -33
  75. data/spec/code/parser/class_spec.rb +0 -32
  76. data/spec/code/parser/code_spec.rb +0 -13
  77. data/spec/code/parser/dictionnary_spec.rb +0 -40
  78. data/spec/code/parser/equal_spec.rb +0 -42
  79. data/spec/code/parser/equality_spec.rb +0 -26
  80. data/spec/code/parser/function_spec.rb +0 -43
  81. data/spec/code/parser/greater_than_spec.rb +0 -26
  82. data/spec/code/parser/group_spec.rb +0 -13
  83. data/spec/code/parser/if_modifier_spec.rb +0 -26
  84. data/spec/code/parser/if_spec.rb +0 -39
  85. data/spec/code/parser/list_spec.rb +0 -27
  86. data/spec/code/parser/multiplication_spec.rb +0 -26
  87. data/spec/code/parser/negation_spec.rb +0 -13
  88. data/spec/code/parser/not_keyword_spec.rb +0 -21
  89. data/spec/code/parser/nothing_spec.rb +0 -20
  90. data/spec/code/parser/number_spec.rb +0 -24
  91. data/spec/code/parser/or_keyword_spec.rb +0 -26
  92. data/spec/code/parser/or_operator_spec.rb +0 -26
  93. data/spec/code/parser/power_spec.rb +0 -21
  94. data/spec/code/parser/range_spec.rb +0 -21
  95. data/spec/code/parser/rescue_spec.rb +0 -26
  96. data/spec/code/parser/shift_spec.rb +0 -26
  97. data/spec/code/parser/string_spec.rb +0 -28
  98. data/spec/code/parser/ternary_spec.rb +0 -26
  99. data/spec/code/parser/unary_minus_spec.rb +0 -21
  100. data/spec/code/parser/while_spec.rb +0 -32
  101. data/spec/code/parser_spec.rb +0 -13
  102. data/spec/spec_helper.rb +0 -6
  103. data/spec/template/parser_spec.rb +0 -13
@@ -1,183 +0,0 @@
1
- class Code
2
- class Parser
3
- class Call < ::Code::Parser
4
- def parse
5
- name = parse_subclass(::Code::Parser::Name)
6
- return unless name
7
-
8
- if match(OPENING_PARENTHESIS)
9
- arguments = []
10
-
11
- arguments << (parse_keyword_argument || parse_regular_argument)
12
-
13
- while match(COMMA) && !end_of_input?
14
- arguments << (parse_keyword_argument || parse_regular_argument)
15
- end
16
-
17
- arguments.compact!
18
-
19
- match(CLOSING_PARENTHESIS)
20
- else
21
- arguments = nil
22
- end
23
-
24
- previous_cursor = cursor
25
- comments = parse_comments
26
-
27
- if match(DO_KEYWORD)
28
- block = parse_block
29
- match(END_KEYWORD)
30
- elsif match(OPENING_CURLY_BRACKET)
31
- block = parse_block
32
- match(CLOSING_CURLY_BRACKET)
33
- else
34
- @cursor = previous_cursor
35
- buffer!
36
- block = nil
37
- end
38
-
39
- {
40
- call: {
41
- name: name,
42
- arguments: arguments,
43
- block: block,
44
- comments: comments
45
- }.compact
46
- }
47
- end
48
-
49
- private
50
-
51
- def parse_block
52
- comments = parse_comments
53
-
54
- if match(PIPE)
55
- parameters = []
56
-
57
- parameters << (parse_keyword_parameter || parse_regular_parameter)
58
-
59
- while match(COMMA) && !end_of_input?
60
- parameters << (parse_keyword_parameter || parse_regular_parameter)
61
- end
62
-
63
- match(PIPE)
64
-
65
- {
66
- comments: comments,
67
- parameters: parameters.compact,
68
- body: parse_code
69
- }.compact
70
- else
71
- { comments: comments, body: parse_code }.compact
72
- end
73
- end
74
-
75
- def parse_keyword_argument
76
- previous_cursor = cursor
77
-
78
- comments_before = parse_comments
79
- key = parse_subclass(::Code::Parser::Statement)
80
- comments_after = parse_comments
81
-
82
- if key && match(COLON) || match(EQUAL + GREATER)
83
- default = parse_code
84
- default = nil if default.empty?
85
- {
86
- comments_before: comments_before,
87
- comments_after: comments_after,
88
- default: default,
89
- keyword: true,
90
- statement: key
91
- }.compact
92
- else
93
- @cursor = previous_cursor
94
- buffer!
95
- return
96
- end
97
- end
98
-
99
- def parse_regular_argument
100
- code = parse_code
101
- return if code.empty?
102
- code
103
- end
104
-
105
- def parse_keyword_parameter
106
- previous_cursor = cursor
107
-
108
- comments_before = parse_comments
109
- name = parse_subclass(::Code::Parser::Name)
110
- comments_after = parse_comments
111
-
112
- if name && match(COLON) || match(EQUAL + GREATER)
113
- default = parse_default
114
-
115
- {
116
- kind: :keyword,
117
- name: name,
118
- default: default,
119
- comments_before: comments_before,
120
- comments_after: comments_after
121
- }.compact
122
- else
123
- @cursor = previous_cursor
124
- buffer!
125
- return
126
- end
127
- end
128
-
129
- def parse_regular_parameter
130
- previous_cursor = cursor
131
- comments_before = parse_comments
132
-
133
- if match(AMPERSAND)
134
- kind = :block
135
- elsif match(ASTERISK + ASTERISK)
136
- kind = :keyword_splat
137
- elsif match(ASTERISK)
138
- kind = :regular_splat
139
- else
140
- kind = nil
141
- end
142
-
143
- name = parse_subclass(::Code::Parser::Name)
144
-
145
- if name
146
- comments_after = parse_comments
147
-
148
- if match(EQUAL)
149
- default = parse_default
150
- else
151
- default = nil
152
- end
153
-
154
- {
155
- comments_before: comments_before,
156
- comments_after: comments_after,
157
- default: default,
158
- name: name,
159
- kind: kind
160
- }.compact
161
- else
162
- @cursor = previous_cursor
163
- buffer!
164
- return
165
- end
166
- end
167
-
168
- def parse_default
169
- comments_before = parse_comments
170
- statement = parse_subclass(::Code::Parser::BitwiseAnd)
171
- comments_after = parse_comments
172
-
173
- default = {
174
- statement: statement,
175
- comments_before: comments_before,
176
- comments_after: comments_after
177
- }.compact
178
-
179
- default.empty? ? nil : default
180
- end
181
- end
182
- end
183
- end
@@ -1,41 +0,0 @@
1
- class Code
2
- class Parser
3
- class ChainedCall < ::Code::Parser
4
- def parse
5
- left = parse_dictionnary
6
- previous_cursor = cursor
7
- comments_before = parse_comments
8
-
9
- if left && match([DOT, COLON + COLON])
10
- comments_after = parse_comments
11
- right = parse_dictionnary
12
- if right
13
- chained_call = [{ left: left, right: right }]
14
- while match([DOT, COLON + COLON]) && other_right = parse_dictionnary
15
- chained_call << { right: other_right }
16
- end
17
- {
18
- chained_call: {
19
- calls: chained_call,
20
- comments_before: comments_before,
21
- comments_after: comments_after
22
- }.compact
23
- }
24
- else
25
- @cursor = previous_cursor
26
- buffer!
27
- left
28
- end
29
- else
30
- @cursor = previous_cursor
31
- buffer!
32
- left
33
- end
34
- end
35
-
36
- def parse_dictionnary
37
- parse_subclass(::Code::Parser::Dictionnary)
38
- end
39
- end
40
- end
41
- end
@@ -1,55 +0,0 @@
1
- class Code
2
- class Parser
3
- class Class < ::Code::Parser
4
- def parse
5
- previous_cursor = cursor
6
-
7
- if match(CLASS_KEYWORD)
8
- first_comments = parse_comments
9
-
10
- name = parse_subclass(::Code::Parser::Name)
11
-
12
- if name
13
- second_comments = parse_comments
14
-
15
- if match(LESSER)
16
- previous_cursor = cursor
17
- third_comments = parse_comments
18
- superclass = parse_subclass(::Code::Parser::Name)
19
-
20
- if !superclass
21
- @cursor = previous_cursor
22
- buffer!
23
- third_comments = nil
24
- end
25
- else
26
- third_comments = nil
27
- superclass = nil
28
- end
29
-
30
- body = parse_code
31
-
32
- match(END_KEYWORD)
33
-
34
- {
35
- class: {
36
- name: name,
37
- superclass: superclass,
38
- first_comments: first_comments,
39
- second_comments: second_comments,
40
- third_comments: third_comments,
41
- body: body
42
- }.compact
43
- }
44
- else
45
- @cursor = previous_cursor
46
- buffer!
47
- parse_subclass(::Code::Parser::While)
48
- end
49
- else
50
- parse_subclass(::Code::Parser::While)
51
- end
52
- end
53
- end
54
- end
55
- end
@@ -1,20 +0,0 @@
1
- class Code
2
- class Parser
3
- class Code < ::Code::Parser
4
- def parse
5
- output = []
6
-
7
- comments = parse_comments
8
- output << { comments: comments } if comments
9
-
10
- while code = parse_subclass(::Code::Parser::Statement)
11
- output << code
12
- comments = parse_comments
13
- output << { comments: comments } if comments
14
- end
15
-
16
- output
17
- end
18
- end
19
- end
20
- end
@@ -1,46 +0,0 @@
1
- class Code
2
- class Parser
3
- class Comments < ::Code::Parser
4
- def initialize(input, whitespace: WHITESPACE, **kargs)
5
- super(input, **kargs)
6
- @whitespace = whitespace
7
- @has_line_comments = whitespace.include?(NEWLINE)
8
- end
9
-
10
- def parse
11
- comments = []
12
-
13
- while next?(whitespace) || next?(SLASH + ASTERISK) ||
14
- (line_comments? && (next?(SLASH + SLASH) || next?(HASH)))
15
- consume while next?(whitespace)
16
- buffer!
17
-
18
- if match(SLASH + SLASH) || match(HASH)
19
- consume while !next?(NEWLINE) && !end_of_input?
20
- match(NEWLINE)
21
- comments << buffer
22
- end
23
-
24
- consume while next?(whitespace)
25
- buffer!
26
-
27
- if match(SLASH + ASTERISK)
28
- consume while !next?(ASTERISK + SLASH) && !end_of_input?
29
- match(ASTERISK + SLASH)
30
- comments << buffer
31
- end
32
- end
33
-
34
- comments.empty? ? nil : comments
35
- end
36
- end
37
-
38
- private
39
-
40
- attr_reader :whitespace, :has_line_comments
41
-
42
- def line_comments?
43
- !!has_line_comments
44
- end
45
- end
46
- end
@@ -1,52 +0,0 @@
1
- class Code
2
- class Parser
3
- class Dictionnary < ::Code::Parser
4
- def parse
5
- if match(OPENING_CURLY_BRACKET)
6
- dictionnary = []
7
-
8
- comments = parse_comments
9
-
10
- dictionnary << parse_key_value
11
-
12
- dictionnary << parse_key_value while match(COMMA) && !end_of_input?
13
-
14
- match(CLOSING_CURLY_BRACKET)
15
-
16
- { dictionnary: dictionnary.compact, comments: comments }.compact
17
- else
18
- parse_subclass(::Code::Parser::List)
19
- end
20
- end
21
-
22
- def parse_key_value
23
- previous_cursor = cursor
24
-
25
- comments_before = parse_comments
26
-
27
- key = parse_subclass(::Code::Parser::Statement)
28
-
29
- comments_after = parse_comments
30
-
31
- if key
32
- if match(COLON) || match(EQUAL + GREATER)
33
- value = parse_code
34
- else
35
- value = nil
36
- end
37
-
38
- {
39
- key: key,
40
- value: value,
41
- comments_before: comments_before,
42
- comments_after: comments_after
43
- }.compact
44
- else
45
- @cursor = previous_cursor
46
- buffer!
47
- return
48
- end
49
- end
50
- end
51
- end
52
- end
@@ -1,68 +0,0 @@
1
- class Code
2
- class Parser
3
- class Equal < ::Code::Parser
4
- def parse
5
- previous_cursor = cursor
6
-
7
- left = parse_left
8
-
9
- comments_before = parse_comments
10
-
11
- if left && operator = match(EQUALS)
12
- comments_after = parse_comments
13
-
14
- right = parse_subclass(::Code::Parser::Equal)
15
-
16
- if right
17
- {
18
- equal: {
19
- operator: operator,
20
- left: left,
21
- right: right,
22
- comments_before: comments_before,
23
- comments_after: comments_after
24
- }.compact
25
- }
26
- else
27
- @cursor = previous_cursor
28
- buffer!
29
- parse_next
30
- end
31
- else
32
- @cursor = previous_cursor
33
- buffer!
34
- parse_next
35
- end
36
- end
37
-
38
- private
39
-
40
- def parse_next
41
- parse_subclass(::Code::Parser::Rescue)
42
- end
43
-
44
- def parse_left
45
- left = parse_subclass(::Code::Parser::Name)
46
- return unless left
47
-
48
- previous_cursor = cursor
49
- comments_before = parse_comments
50
-
51
- if match(DOT) || match(COLON + COLON)
52
- right = parse_subclass(::Code::Parser::Name)
53
- if right
54
- { left: left, right: right }
55
- else
56
- @cursor = previous_cursor
57
- buffer!
58
- return
59
- end
60
- else
61
- @cursor = previous_cursor
62
- buffer!
63
- left
64
- end
65
- end
66
- end
67
- end
68
- end
@@ -1,20 +0,0 @@
1
- class Code
2
- class Parser
3
- class Equality < ::Code::Parser
4
- def parse
5
- parse_subclass(
6
- ::Code::Parser::Operation,
7
- operators: [
8
- EQUAL + EQUAL + EQUAL,
9
- LESSER + EQUAL + GREATER,
10
- EQUAL + TILDE,
11
- EXCLAMATION_POINT + TILDE,
12
- EQUAL + EQUAL,
13
- EXCLAMATION_POINT + EQUAL
14
- ],
15
- subclass: ::Code::Parser::GreaterThan
16
- )
17
- end
18
- end
19
- end
20
- end
@@ -1,36 +0,0 @@
1
- class Code
2
- class Parser
3
- class Error
4
- class SyntaxError < ::Code::Parser::Error
5
- def initialize(
6
- message,
7
- input:,
8
- line:,
9
- column:,
10
- offset_lines:,
11
- offset_columns:
12
- )
13
- @message = message
14
- @input = input
15
- @line = line
16
- @column = column
17
- @offset_lines = offset_lines
18
- @offset_columns = offset_columns
19
- end
20
-
21
- def message
22
- @message + "\n\n" + line_message + "\n" + " " * column +
23
- "^" * offset_columns
24
- end
25
-
26
- private
27
-
28
- def line_message
29
- input.lines[line..(line + offset_lines)].join
30
- end
31
-
32
- attr_reader :input, :line, :column, :offset_lines, :offset_columns
33
- end
34
- end
35
- end
36
- end
@@ -1,6 +0,0 @@
1
- class Code
2
- class Parser
3
- class Error < ::StandardError
4
- end
5
- end
6
- end
@@ -1,118 +0,0 @@
1
- class Code
2
- class Parser
3
- class Function < ::Code::Parser
4
- def parse
5
- return parse_next unless next?(OPENING_PARENTHESIS)
6
- previous_cursor = cursor
7
- match(OPENING_PARENTHESIS)
8
- parameters_comments = parse_comments
9
- parameters = parse_parameters
10
- match(CLOSING_PARENTHESIS)
11
- comments_before = parse_comments
12
- if match(EQUAL + GREATER)
13
- comments_after = parse_comments
14
- if match(OPENING_CURLY_BRACKET)
15
- body = parse_code
16
- match(CLOSING_CURLY_BRACKET)
17
- {
18
- function: {
19
- parameters: parameters,
20
- body: body,
21
- parameters_comments: parameters_comments,
22
- comments_before: comments_before,
23
- comments_after: comments_after
24
- }.compact
25
- }
26
- else
27
- buffer!
28
- @cursor = previous_cursor
29
- parse_next
30
- end
31
- else
32
- buffer!
33
- @cursor = previous_cursor
34
- parse_next
35
- end
36
- end
37
-
38
- def parse_next
39
- parse_subclass(::Code::Parser::ChainedCall)
40
- end
41
-
42
- def parse_parameters
43
- parameters = []
44
-
45
- parameters << (parse_keyword_parameter || parse_regular_parameter)
46
-
47
- while match(COMMA) && !end_of_input?
48
- parameters << (parse_keyword_parameter || parse_regular_parameter)
49
- end
50
-
51
- parameters.compact.empty? ? nil : parameters.compact
52
- end
53
-
54
- def parse_keyword_parameter
55
- previous_cursor = cursor
56
-
57
- comments_before = parse_comments
58
- name = parse_subclass(::Code::Parser::Name)
59
- comments_after = parse_comments
60
-
61
- if name && (match(COLON) || match(EQUAL + GREATER))
62
- default = parse_code
63
-
64
- {
65
- kind: :keyword,
66
- name: name,
67
- default: default,
68
- comments_before: comments_before,
69
- comments_after: comments_after
70
- }.compact
71
- else
72
- @cursor = previous_cursor
73
- buffer!
74
- return
75
- end
76
- end
77
-
78
- def parse_regular_parameter
79
- previous_cursor = cursor
80
-
81
- comments_before = parse_comments
82
-
83
- if match(AMPERSAND)
84
- kind = :block
85
- elsif match(ASTERISK + ASTERISK)
86
- kind = :keyword_splat
87
- elsif match(ASTERISK)
88
- kind = :regular_splat
89
- else
90
- kind = nil
91
- end
92
-
93
- name = parse_subclass(::Code::Parser::Name)
94
- comments_after = parse_comments
95
-
96
- if name
97
- if match(EQUAL)
98
- default = parse_code
99
- else
100
- default = nil
101
- end
102
-
103
- {
104
- kind: kind,
105
- name: name,
106
- default: default,
107
- comments_before: comments_before,
108
- comments_after: comments_after
109
- }.compact
110
- else
111
- @cursor = previous_cursor
112
- buffer!
113
- return
114
- end
115
- end
116
- end
117
- end
118
- end
@@ -1,13 +0,0 @@
1
- class Code
2
- class Parser
3
- class GreaterThan < ::Code::Parser
4
- def parse
5
- parse_subclass(
6
- ::Code::Parser::Operation,
7
- operators: [GREATER + EQUAL, LESSER + EQUAL, GREATER, LESSER],
8
- subclass: ::Code::Parser::BitwiseOr
9
- )
10
- end
11
- end
12
- end
13
- end
@@ -1,15 +0,0 @@
1
- class Code
2
- class Parser
3
- class Group < ::Code::Parser
4
- def parse
5
- if match(OPENING_PARENTHESIS)
6
- code = parse_subclass(::Code::Parser::Code)
7
- match(CLOSING_PARENTHESIS)
8
- { group: code }
9
- else
10
- parse_subclass(::Code::Parser::Call)
11
- end
12
- end
13
- end
14
- end
15
- end