code-ruby-parser 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 75b549d03f89ef60a67380c6bb2ffb9f8c29ae367f1d78b1535d085be7ad1735
4
- data.tar.gz: 7b92207a50f9ace1308eb0344780fc01d1adcc44629cefc7780ee7271ec14f57
3
+ metadata.gz: e0b771db0340e7e46f375f056056480d1b92ec6210fae8aa91025b3b10cdccad
4
+ data.tar.gz: 71fff0149a4e017fc03e0b4b9798d23fb94c874c937f51b8ee89a3c752619cc9
5
5
  SHA512:
6
- metadata.gz: 330c5c233c99a1148e0769bf19bc966e5422891d23a58d7663ef57d09381cd0a7d88ed8a338374d1ead99cd54564eb903148bf50680ccf64056df549db127a20
7
- data.tar.gz: 522ad02a718830b2d23a14855db77f5c463d5348dc953213b151c80cf1bc3e28b0a84b204109db0320700ed22bb41675b8c4023d1aa7f98bc385996a33b74e26
6
+ metadata.gz: 6480f03895aa2958809b4d7cf849b2720de2d8eba33af43e2999db8d6609cb83936a4649e931da459dd376c489f9c8d4f0671cdb56a6a45706c931adc0fd9cff
7
+ data.tar.gz: 3a51ac65786932de2ed2bd1c64f022e7a498e78233aea3085ffb6acd4f26970bcfb7ef3520078c7a94bdc7bf7f2c6e7d4d72a95155cac6e3b2c9d3ba9d84a6a8
data/CHANGELOG.md ADDED
@@ -0,0 +1,11 @@
1
+ ### 0.1.2 - November 12, 2022
2
+
3
+ - Fix parsing `&:even?`
4
+
5
+ ### 0.1.1 - November 12, 2022
6
+
7
+ - Fix `:even?` and `:update?` strings
8
+
9
+ ### 0.1.0 - November 12, 2022
10
+
11
+ - Initial release
data/bin/push ADDED
@@ -0,0 +1,16 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ rm -f *.gem
6
+ git pull
7
+ git push
8
+ gem build template-ruby-parser.gemspec
9
+ gem build code-ruby-parser.gemspec
10
+
11
+ for file in *.gem
12
+ do
13
+ gem push $file
14
+ done
15
+
16
+ rm *.gem
@@ -0,0 +1,16 @@
1
+ require_relative "lib/code-ruby-parser"
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "code-ruby-parser"
5
+ s.version = ::Template::Parser::Version
6
+ s.summary = "A parser for the Code programming language"
7
+ s.description =
8
+ "A parser for the Code programming language, like 1 + 1 and user.first_name"
9
+ s.authors = ["Dorian Marié"]
10
+ s.email = "dorian@dorianmarie.fr"
11
+ s.files = `git ls-files`.split($/)
12
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
13
+ s.require_paths = ["lib"]
14
+ s.homepage = "https://github.com/dorianmariefr/template-ruby-parser"
15
+ s.license = "MIT"
16
+ end
@@ -38,7 +38,7 @@ class Code
38
38
 
39
39
  {
40
40
  call: {
41
- **identifier,
41
+ identifier: identifier,
42
42
  arguments: arguments,
43
43
  block: block,
44
44
  comments: comments
@@ -117,7 +117,7 @@ class Code
117
117
  comments_after: comments_after,
118
118
  default: default,
119
119
  keyword: true,
120
- **key
120
+ identifier: key
121
121
  }.compact
122
122
  else
123
123
  @cursor = previous_cursor
@@ -140,13 +140,13 @@ class Code
140
140
  comments_before: comments_before,
141
141
  comments_after: comments_after,
142
142
  default: default,
143
- **identifier
143
+ identifier: identifier
144
144
  }.compact
145
145
  else
146
146
  {
147
147
  comments_before: comments_before,
148
148
  comments_after: comments_after,
149
- **identifier
149
+ identifier: identifier
150
150
  }.compact
151
151
  end
152
152
  else
@@ -68,7 +68,7 @@ class Code
68
68
  keyword: true,
69
69
  comments_before: comments_before,
70
70
  comments_after: comments_after,
71
- **key
71
+ identifier: key
72
72
  }.compact
73
73
  else
74
74
  @cursor = previous_cursor
@@ -96,7 +96,7 @@ class Code
96
96
  default: default,
97
97
  comments_before: comments_before,
98
98
  comments_after: comments_after,
99
- **identifier
99
+ identifier: identifier
100
100
  }.compact
101
101
  else
102
102
  @cursor = previous_cursor
@@ -9,36 +9,22 @@ class Code
9
9
  def parse
10
10
  return if end_of_input?
11
11
 
12
- previous_cursor = cursor
13
-
14
- if !simple? && match(AMPERSAND) && !next?(SPECIAL)
15
- kind = :block
16
- elsif !simple && match(ASTERISK + ASTERISK) && !next?(SPECIAL)
17
- kind = :keyword
18
- elsif !simple? && match(ASTERISK) && !next?(SPECIAL)
19
- kind = :regular
20
- elsif !next?(SPECIAL)
21
- kind = nil
22
- else
23
- @cursor = previous_cursor
24
- buffer!
25
- return
26
- end
27
-
28
- buffer!
12
+ if !simple? && match(AMPERSAND)
13
+ { block: parse_subclass(::Code::Parser::Statement) }
14
+ elsif !simple && match(ASTERISK + ASTERISK)
15
+ { keyword_splat: parse_subclass(::Code::Parser::Statement) }
16
+ elsif !simple? && match(ASTERISK)
17
+ { regular_splat: parse_subclass(::Code::Parser::Statement) }
18
+ elsif !next?(SPECIAL) && !next?(KEYWORDS)
19
+ consume while !next?(SPECIAL) && !end_of_input?
29
20
 
30
- consume while !next?(SPECIAL) && !end_of_input?
21
+ match(QUESTION_MARK) || match(EXCLAMATION_POINT) if !simple?
31
22
 
32
- match(QUESTION_MARK) || match(EXCLAMATION_POINT) if !simple?
23
+ name = buffer!
33
24
 
34
- name = buffer!
35
-
36
- if KEYWORDS.include?(name)
37
- @cursor = previous_cursor
38
- buffer!
39
- return
25
+ { name: name }
40
26
  else
41
- { name: name, kind: kind }.compact
27
+ return
42
28
  end
43
29
  end
44
30
 
@@ -11,28 +11,38 @@ class Code
11
11
  def parse
12
12
  previous_cursor = cursor
13
13
  left = parse_subclass(subclass)
14
- right = []
15
- previous_cursor = cursor
16
- comments = parse_comments
17
-
18
- while operator = match(operators)
14
+ if left
15
+ right = []
16
+ previous_cursor = cursor
19
17
  comments = parse_comments
20
- statement = parse_subclass(subclass)
21
- right << {
22
- comments: comments,
23
- statement: statement,
24
- operator: operator
25
- }.compact
26
- end
27
18
 
28
- if right.empty?
19
+ while operator = match(operators)
20
+ comments = parse_comments
21
+ statement = parse_subclass(subclass)
22
+ right << {
23
+ comments: comments,
24
+ statement: statement,
25
+ operator: operator
26
+ }.compact
27
+ end
28
+
29
+ if right.empty?
30
+ @cursor = previous_cursor
31
+ buffer!
32
+ left
33
+ else
34
+ {
35
+ operation: {
36
+ left: left,
37
+ comments: comments,
38
+ right: right
39
+ }.compact
40
+ }
41
+ end
42
+ else
29
43
  @cursor = previous_cursor
30
44
  buffer!
31
- left
32
- else
33
- {
34
- operation: { left: left, comments: comments, right: right }.compact
35
- }
45
+ return
36
46
  end
37
47
  end
38
48
 
@@ -9,6 +9,7 @@ class Code
9
9
  elsif match(COLON) && !next?(SPECIAL)
10
10
  buffer!
11
11
  consume while !next?(SPECIAL) && !end_of_input?
12
+ match(QUESTION_MARK) || match(EXCLAMATION_POINT)
12
13
  { string: buffer }
13
14
  else
14
15
  parse_subclass(::Code::Parser::Number)
@@ -1,6 +1,6 @@
1
1
  class Template
2
2
  class Parser < ::Code::Parser
3
- Version = Gem::Version.new("0.1.0")
3
+ Version = Gem::Version.new("0.1.2")
4
4
 
5
5
  def parse
6
6
  parts = []
@@ -7,6 +7,7 @@ RSpec.describe ::Code::Parser do
7
7
  "''",
8
8
  '""',
9
9
  ":a",
10
+ ":even?",
10
11
  "'Hello Dorian'",
11
12
  '"Hello Dorian"',
12
13
  "'Hello \\' Dorian'",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code-ruby-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié
@@ -18,11 +18,14 @@ extra_rdoc_files: []
18
18
  files:
19
19
  - ".gitignore"
20
20
  - ".overcommit.yml"
21
+ - CHANGELOG.md
21
22
  - Gemfile
22
23
  - Gemfile.lock
23
24
  - bin/code-parser
24
25
  - bin/format
26
+ - bin/push
25
27
  - bin/template-parser
28
+ - code-ruby-parser.gemspec
26
29
  - docs/class.code
27
30
  - docs/meetup.code
28
31
  - docs/rain.code