template-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: 67bbbdf0c0e64c96b6f81824ccc09709ebf052c7673534845d603706570d96e8
4
- data.tar.gz: 14f5d04f9e1ca82141d72fbd485b42614d9a89fbd75005f3d0cc9be8b4de48e4
3
+ metadata.gz: 71ab2b49a484a6c7dc34c721eeda9ccf669f7391c02af0e627cffd498e53defd
4
+ data.tar.gz: 8eb48aab1222d2b68fe0e15deea00ff160aac48710cd13f4055a813f99decdcf
5
5
  SHA512:
6
- metadata.gz: 26749ce437c50f9c1abb9c736c1b42da827a8bd9eceb00ad5494935fafdf72ae35b6a944fc64a1d4547960467a73ffd43cdad3cf50f8d31374e7a2123f40884c
7
- data.tar.gz: 9c11b4ea8624de55a3388b0b63ffba1605d87d5f7ac535c0e80e30412812b70aade514e04e0618b4aaba1cc3b9c90374e01cd3759968a6e6b8e1d7165ab2005f
6
+ metadata.gz: a8eaec5d463a3f9476323f0db4ee169614fd87adc72622f7f63d42f9e0d527e52fe4ee57c3eba933ff6e4536a13afcdb963bede4d99061428e4d14ab278cb948
7
+ data.tar.gz: 44b445b869b8031fad0a38fba852ee845077aad92b0775e953c3ce4d3e9a0f36d16d0999695d70330c7b6b7979c7ef5f6c9065903437136327933814869d44fe
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: template-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