unparser 0.2.5 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cd0aa87d79ce744a9716b80c4a33767b8cbcd662
4
- data.tar.gz: 6209862711ac0f807c9a6f20bdfdc626236a1b86
3
+ metadata.gz: c3058b3246021ca8bbd7bc5aa6f8619b4fe66245
4
+ data.tar.gz: ef701ba495d7cb5805ebc64ec6021f6ccc4d76cc
5
5
  SHA512:
6
- metadata.gz: 9cbac595a34a132926c4c09a703ec08f57b71980e2ba711534ea188d4512703d000ebbef2d2eb743aceb2fa2d10ef2230adad17518300bb1aaba0e65d7e1361f
7
- data.tar.gz: 2536d2b1151da2b12d2efe9dc3d45fb5de4158adfa4698d70204d343b50cac2217ad142e9d7220a43069bb912839dc080925bb9c05ea30320e8451b0b8efdaea
6
+ metadata.gz: 500cad862ca383cc943c2b4d2be2a46513013ee8874406b01e024fff47c1744bba91a7062a9cd28b8e10729549d4c24e68e42105cef336e756d8fe018fce542e
7
+ data.tar.gz: 585157bea807a765757e04d2fd0fb7bda10bf7467bff75a9569a36d0f3aa8c1bb1e8f34cac12ff14925b21a3bab00c8d435d18293f0a1267816ec40e7ff85946
data/.gitignore CHANGED
@@ -32,7 +32,6 @@ measurements
32
32
 
33
33
  ## BUNDLER
34
34
  .bundle
35
- Gemfile.lock
36
35
 
37
36
  ## PROJECT::SPECIFIC
38
37
  /vendor
data/Changelog.md CHANGED
@@ -1,3 +1,9 @@
1
+ # v0.2.6 2017-05-30
2
+
3
+ * Reduce memory consumption via not requirering all possible parsers
4
+ * Allow ruby 2.4
5
+ * Update parser dependency
6
+
1
7
  # v0.2.5 2016-01-24
2
8
 
3
9
  * Add support for ruby 2.3
data/Gemfile CHANGED
@@ -1,5 +1,3 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
-
5
- gem 'mutant', git: 'https://github.com/mbj/mutant.git', branch: 'feature/parser-2-3'
data/Gemfile.lock ADDED
@@ -0,0 +1,166 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ unparser (0.2.5)
5
+ abstract_type (~> 0.0.7)
6
+ adamantium (~> 0.2.0)
7
+ concord (~> 0.1.5)
8
+ diff-lcs (~> 1.3)
9
+ equalizer (~> 0.0.9)
10
+ parser (>= 2.3.1.2, < 2.5)
11
+ procto (~> 0.0.2)
12
+
13
+ GEM
14
+ remote: https://rubygems.org/
15
+ specs:
16
+ abstract_type (0.0.7)
17
+ adamantium (0.2.0)
18
+ ice_nine (~> 0.11.0)
19
+ memoizable (~> 0.4.0)
20
+ anima (0.3.0)
21
+ abstract_type (~> 0.0.7)
22
+ adamantium (~> 0.2)
23
+ equalizer (~> 0.0.11)
24
+ ast (2.3.0)
25
+ axiom-types (0.1.1)
26
+ descendants_tracker (~> 0.0.4)
27
+ ice_nine (~> 0.11.0)
28
+ thread_safe (~> 0.3, >= 0.3.1)
29
+ codeclimate-engine-rb (0.4.0)
30
+ virtus (~> 1.0)
31
+ coercible (1.0.0)
32
+ descendants_tracker (~> 0.0.1)
33
+ concord (0.1.5)
34
+ adamantium (~> 0.2.0)
35
+ equalizer (~> 0.0.9)
36
+ descendants_tracker (0.0.4)
37
+ thread_safe (~> 0.3, >= 0.3.1)
38
+ devtools (0.1.16)
39
+ adamantium (~> 0.2.0)
40
+ anima (~> 0.3.0)
41
+ concord (~> 0.1.5)
42
+ flay (~> 2.8.1)
43
+ flog (~> 4.4.0)
44
+ mutant (~> 0.8.11)
45
+ mutant-rspec (~> 0.8.11)
46
+ procto (~> 0.0.3)
47
+ rake (~> 11.3.0)
48
+ reek (~> 4.5.0)
49
+ rspec (~> 3.5.0)
50
+ rspec-core (~> 3.5.4)
51
+ rspec-its (~> 1.2.0)
52
+ rubocop (~> 0.47.0)
53
+ simplecov (~> 0.12.0)
54
+ yard (~> 0.9.1)
55
+ yardstick (~> 0.9.9)
56
+ diff-lcs (1.3)
57
+ docile (1.1.5)
58
+ equalizer (0.0.11)
59
+ erubis (2.7.0)
60
+ flay (2.8.1)
61
+ erubis (~> 2.7.0)
62
+ path_expander (~> 1.0)
63
+ ruby_parser (~> 3.0)
64
+ sexp_processor (~> 4.0)
65
+ flog (4.4.1)
66
+ path_expander (~> 1.0)
67
+ ruby_parser (~> 3.1, > 3.1.0)
68
+ sexp_processor (~> 4.4)
69
+ ice_nine (0.11.2)
70
+ json (2.0.3)
71
+ memoizable (0.4.2)
72
+ thread_safe (~> 0.3, >= 0.3.1)
73
+ morpher (0.2.6)
74
+ abstract_type (~> 0.0.7)
75
+ adamantium (~> 0.2.0)
76
+ anima (~> 0.3.0)
77
+ ast (~> 2.2)
78
+ concord (~> 0.1.5)
79
+ equalizer (~> 0.0.9)
80
+ ice_nine (~> 0.11.0)
81
+ procto (~> 0.0.2)
82
+ mutant (0.8.12)
83
+ abstract_type (~> 0.0.7)
84
+ adamantium (~> 0.2.0)
85
+ anima (~> 0.3.0)
86
+ ast (~> 2.2)
87
+ concord (~> 0.1.5)
88
+ diff-lcs (~> 1.2)
89
+ equalizer (~> 0.0.9)
90
+ ice_nine (~> 0.11.1)
91
+ memoizable (~> 0.4.2)
92
+ morpher (~> 0.2.6)
93
+ parallel (~> 1.3)
94
+ parser (~> 2.3.1, >= 2.3.1.4)
95
+ procto (~> 0.0.2)
96
+ regexp_parser (~> 0.3.6)
97
+ unparser (~> 0.2.5)
98
+ mutant-rspec (0.8.11)
99
+ mutant (~> 0.8.11)
100
+ rspec-core (>= 3.4.0, < 3.6.0)
101
+ parallel (1.10.0)
102
+ parser (2.3.3.1)
103
+ ast (~> 2.2)
104
+ path_expander (1.0.1)
105
+ powerpack (0.1.1)
106
+ procto (0.0.3)
107
+ rainbow (2.2.1)
108
+ rake (11.3.0)
109
+ reek (4.5.4)
110
+ codeclimate-engine-rb (~> 0.4.0)
111
+ parser (~> 2.3.1, >= 2.3.1.2)
112
+ rainbow (~> 2.0)
113
+ regexp_parser (0.3.6)
114
+ rspec (3.5.0)
115
+ rspec-core (~> 3.5.0)
116
+ rspec-expectations (~> 3.5.0)
117
+ rspec-mocks (~> 3.5.0)
118
+ rspec-core (3.5.4)
119
+ rspec-support (~> 3.5.0)
120
+ rspec-expectations (3.5.0)
121
+ diff-lcs (>= 1.2.0, < 2.0)
122
+ rspec-support (~> 3.5.0)
123
+ rspec-its (1.2.0)
124
+ rspec-core (>= 3.0.0)
125
+ rspec-expectations (>= 3.0.0)
126
+ rspec-mocks (3.5.0)
127
+ diff-lcs (>= 1.2.0, < 2.0)
128
+ rspec-support (~> 3.5.0)
129
+ rspec-support (3.5.0)
130
+ rubocop (0.47.1)
131
+ parser (>= 2.3.3.1, < 3.0)
132
+ powerpack (~> 0.1)
133
+ rainbow (>= 1.99.1, < 3.0)
134
+ ruby-progressbar (~> 1.7)
135
+ unicode-display_width (~> 1.0, >= 1.0.1)
136
+ ruby-progressbar (1.8.1)
137
+ ruby_parser (3.8.4)
138
+ sexp_processor (~> 4.1)
139
+ sexp_processor (4.7.0)
140
+ simplecov (0.12.0)
141
+ docile (~> 1.1.0)
142
+ json (>= 1.8, < 3)
143
+ simplecov-html (~> 0.10.0)
144
+ simplecov-html (0.10.0)
145
+ thread_safe (0.3.5)
146
+ unicode-display_width (1.1.3)
147
+ virtus (1.0.5)
148
+ axiom-types (~> 0.1)
149
+ coercible (~> 1.0)
150
+ descendants_tracker (~> 0.0, >= 0.0.3)
151
+ equalizer (~> 0.0, >= 0.0.9)
152
+ yard (0.9.8)
153
+ yardstick (0.9.9)
154
+ yard (~> 0.8, >= 0.8.7.2)
155
+
156
+ PLATFORMS
157
+ ruby
158
+
159
+ DEPENDENCIES
160
+ anima (~> 0.3.0)
161
+ devtools (~> 0.1.3)
162
+ morpher (~> 0.2.6)
163
+ unparser!
164
+
165
+ BUNDLED WITH
166
+ 1.13.7
data/README.md CHANGED
@@ -9,14 +9,20 @@ unparser
9
9
  Generate equivalent source for ASTs from whitequarks [parser](https://github.com/whitequark/parser).
10
10
  Excluding the macruby extensions the parser gem implemnents on top of ruby syntax.
11
11
 
12
- Excluding the MacRuby / RubyMotion extensions the parser gem implemenents on top of MRI ruby syntax starting with parser release 2.3.
13
- If you feel the need to get them supported, contact me.
12
+ Excluding the MacRuby / RubyMotion extensions the parser gem implemenents on top of MRI Ruby
13
+ syntax starting with parser release 2.3. If you feel the need to get them supported, contact me.
14
14
 
15
- This library is able to reproduce 100% of ruby 1.9, 2.0 and 2.1 syntax. Including its own source code.
15
+ This library is able to reproduce 100% of Ruby 2.1 - 2.3 syntax. Including its own source code.
16
16
 
17
17
  It serves well for [mutant](https://github.com/mbj/mutant) mutators and the in-memory vendoring for self hosting,
18
18
  and other tooling.
19
19
 
20
+ Public API:
21
+ -----------
22
+
23
+ While unparser is in the `0.x` versions its public API can change any moment. I recommend to use `~> 0.x.y` style
24
+ version constraints that should give the best mileage.
25
+
20
26
  Usage
21
27
  -----
22
28
 
data/Rakefile CHANGED
@@ -6,15 +6,16 @@ task('metrics:mutant').clear
6
6
 
7
7
  namespace :metrics do
8
8
  task mutant: :coverage do
9
- system(*%w[
9
+ args = %w[
10
10
  bundle exec mutant
11
- --include lib
12
- --require unparser
13
- --use rspec
14
- --zombie
15
- --since HEAD~1
16
- --
17
- Unparser*
18
- ]) or fail "Mutant task failed"
11
+ --include lib
12
+ --require unparser
13
+ --use rspec
14
+ --zombie
15
+ --since HEAD~1
16
+ ]
17
+ args.concat(%w[--jobs 4]) if ENV.key?('CIRCLECI')
18
+
19
+ system(*args.concat(%w[-- Unparser*])) or fail "Mutant task failed"
19
20
  end
20
21
  end
data/config/devtools.yml CHANGED
@@ -1,2 +1,2 @@
1
1
  ---
2
- unit_test_timeout: 2.0
2
+ unit_test_timeout: 0.1
data/config/flay.yml CHANGED
@@ -1,3 +1,3 @@
1
1
  ---
2
2
  threshold: 13
3
- total_score: 673
3
+ total_score: 659
data/config/rubocop.yml CHANGED
@@ -5,6 +5,7 @@ AllCops:
5
5
  - '**/*.rake'
6
6
  - 'Gemfile'
7
7
  - 'Gemfile.triage'
8
+ TargetRubyVersion: 2.1
8
9
 
9
10
  # Avoid parameter lists longer than five parameters.
10
11
  ParameterLists:
@@ -37,6 +38,23 @@ LineLength:
37
38
  ClassLength:
38
39
  Max: 204
39
40
 
41
+ # Prefer modifiers and explicit if statements over returning early for small methods
42
+ GuardClause:
43
+ Enabled: false
44
+
45
+ Metrics/BlockLength:
46
+ Exclude:
47
+ # Ignore RSpec DSL
48
+ - spec/**/*
49
+
50
+ # Flags freezes for singletons that could still be mutated like Regexps
51
+ RedundantFreeze:
52
+ Enabled: false
53
+
54
+ # Allow Fixnum and Bignum. This Gem supports versions before 2.4
55
+ UnifiedInteger:
56
+ Enabled: false
57
+
40
58
  # Disabled because of indenting with private keyword in class bodies.
41
59
  IndentationWidth:
42
60
  Enabled: false
data/lib/unparser.rb CHANGED
@@ -2,7 +2,6 @@ require 'set'
2
2
  require 'abstract_type'
3
3
  require 'procto'
4
4
  require 'concord'
5
- require 'parser/all'
6
5
  require 'parser/current'
7
6
 
8
7
  # Library namespace
data/lib/unparser/ast.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  module Unparser
2
2
  # Namespace for AST processing tools
3
+ # :reek:TooManyConstants
3
4
  module AST
4
5
 
5
6
  FIRST_CHILD = ->(node) { node.children.first }.freeze
data/lib/unparser/cli.rb CHANGED
@@ -9,6 +9,8 @@ require 'unparser/cli/color'
9
9
 
10
10
  module Unparser
11
11
  # Unparser CLI implementation
12
+ #
13
+ # :reek:InstanceVariableAssumption
12
14
  class CLI
13
15
 
14
16
  EXIT_SUCCESS = 0
@@ -148,10 +150,9 @@ module Unparser
148
150
  #
149
151
  def sources(file_name)
150
152
  files =
151
- case
152
- when File.directory?(file_name)
153
+ if File.directory?(file_name)
153
154
  Dir.glob(File.join(file_name, '**/*.rb')).sort
154
- when File.file?(file_name)
155
+ elsif File.file?(file_name)
155
156
  [file_name]
156
157
  else
157
158
  Dir.glob(file_name).sort
@@ -12,7 +12,7 @@ module Unparser
12
12
  # @api private
13
13
  #
14
14
  def format(text)
15
- "\e[#{@code}m#{text}\e[0m"
15
+ "\e[#{code}m#{text}\e[0m"
16
16
  end
17
17
 
18
18
  NONE = Class.new(self) do
@@ -38,8 +38,7 @@ module Unparser
38
38
  #
39
39
  # @api private
40
40
  #
41
- def initialize
42
- end
41
+ def initialize; end
43
42
 
44
43
  end.new
45
44
 
@@ -6,6 +6,51 @@ module Unparser
6
6
 
7
7
  CONTEXT_LINES = 5
8
8
 
9
+ # Return new object
10
+ #
11
+ # @param [String] old
12
+ # @param [String] new
13
+ #
14
+ # @return [Differ]
15
+ #
16
+ # @api private
17
+ #
18
+ def self.build(old, new)
19
+ new(lines(old), lines(new))
20
+ end
21
+
22
+ # Return colorized diff line
23
+ #
24
+ # @param [String] line
25
+ #
26
+ # @return [String]
27
+ #
28
+ # @api private
29
+ #
30
+ def self.colorize_line(line)
31
+ case line[0]
32
+ when '+'
33
+ Color::GREEN
34
+ when '-'
35
+ Color::RED
36
+ else
37
+ Color::NONE
38
+ end.format(line)
39
+ end
40
+
41
+ # Break up source into lines
42
+ #
43
+ # @param [String] source
44
+ #
45
+ # @return [Array<String>]
46
+ #
47
+ # @api private
48
+ #
49
+ def self.lines(source)
50
+ source.lines.map(&:chomp)
51
+ end
52
+ private_class_method :lines
53
+
9
54
  # Return hunks
10
55
  #
11
56
  # @return [Array<Diff::LCS::Hunk>]
@@ -77,32 +122,6 @@ module Unparser
77
122
  end
78
123
  memoize :colorized_diff
79
124
 
80
- # Return new object
81
- #
82
- # @param [String] old
83
- # @param [String] new
84
- #
85
- # @return [Differ]
86
- #
87
- # @api private
88
- #
89
- def self.build(old, new)
90
- new(lines(old), lines(new))
91
- end
92
-
93
- # Break up source into lines
94
- #
95
- # @param [String] source
96
- #
97
- # @return [Array<String>]
98
- #
99
- # @api private
100
- #
101
- def self.lines(source)
102
- source.lines.map(&:chomp)
103
- end
104
- private_class_method :lines
105
-
106
125
  private
107
126
 
108
127
  # Return diffs
@@ -126,25 +145,6 @@ module Unparser
126
145
  [old, new].map(&:length).max
127
146
  end
128
147
 
129
- # Return colorized diff line
130
- #
131
- # @param [String] line
132
- #
133
- # @return [String]
134
- #
135
- # @api private
136
- #
137
- def self.colorize_line(line)
138
- case line[0]
139
- when '+'
140
- Color::GREEN
141
- when '-'
142
- Color::RED
143
- else
144
- Color::NONE
145
- end.format(line)
146
- end
147
-
148
148
  end # CLI
149
149
  end # Differ
150
150
  end # Unparser
@@ -49,14 +49,13 @@ module Unparser
49
49
  # @api private
50
50
  #
51
51
  def report
52
- case
53
- when original_ast && generated_ast
52
+ if original_ast && generated_ast
54
53
  report_with_ast_diff
55
- when !original_ast
54
+ elsif !original_ast
56
55
  report_original
57
- when !generated.success?
56
+ elsif !generated.success?
58
57
  report_unparser
59
- when !generated_ast
58
+ elsif !generated_ast
60
59
  report_generated
61
60
  else
62
61
  raise
@@ -99,11 +99,11 @@ module Unparser
99
99
  #
100
100
  # @api private
101
101
  #
102
+ # :reek:ManualDispatch
103
+ #
102
104
  def self.source_range(node, part)
103
105
  location = node.location
104
- if location && location.respond_to?(part)
105
- location.public_send(part)
106
- end
106
+ location.public_send(part) if location.respond_to?(part)
107
107
  end
108
108
 
109
109
  private
@@ -1,5 +1,11 @@
1
1
  module Unparser
2
2
  # All unparser constants maybe included in other libraries.
3
+ #
4
+ # rubocop:disable MutableConstant
5
+ # False positive since constants are frozen dynamically
6
+ # to avoid duplication of `.freeze` calls
7
+ #
8
+ # :reek:TooManyConstants
3
9
  module Constants
4
10
 
5
11
  # Return frozen symbol set from enumerable
@@ -10,7 +10,7 @@ module Unparser
10
10
  extend DSL
11
11
 
12
12
  # Registry for node emitters
13
- REGISTRY = {}
13
+ REGISTRY = {} # rubocop:disable MutableConstant
14
14
 
15
15
  NOINDENT = [:rescue, :ensure].to_set.freeze
16
16
 
@@ -428,7 +428,7 @@ module Unparser
428
428
  #
429
429
  # False positive:
430
430
  #
431
- # rubocop:disable MethodCallParentheses
431
+ # rubocop:disable MethodCallWithoutArgsParentheses
432
432
  #
433
433
  def indented
434
434
  buffer = buffer()
@@ -74,7 +74,7 @@ module Unparser
74
74
  MAP = {
75
75
  blockarg: T_AMP,
76
76
  kwrestarg: T_DSPLAT
77
- }
77
+ }.freeze
78
78
 
79
79
  handle :blockarg
80
80
  handle :kwrestarg
@@ -145,7 +145,7 @@ module Unparser
145
145
  private
146
146
 
147
147
  NO_COMMA = [:splat, :restarg].to_set.freeze
148
- PARENT_MLHS = [:mlhs, :masgn]
148
+ PARENT_MLHS = [:mlhs, :masgn].freeze
149
149
 
150
150
  # Perform dispatch
151
151
  #
@@ -83,10 +83,9 @@ module Unparser
83
83
  # @api private
84
84
  #
85
85
  def emit_body
86
- case
87
- when body.nil?
86
+ if body.nil?
88
87
  nl
89
- when NOINDENT.include?(body.type)
88
+ elsif NOINDENT.include?(body.type)
90
89
  emit_inner
91
90
  else
92
91
  indented { emit_inner }
@@ -14,8 +14,7 @@ module Unparser
14
14
  #
15
15
  # @api private
16
16
  #
17
- def dispatch
18
- end
17
+ def dispatch; end
19
18
 
20
19
  end
21
20
  end
@@ -7,7 +7,7 @@ module Unparser
7
7
  return: K_RETURN,
8
8
  next: K_NEXT,
9
9
  break: K_BREAK
10
- }
10
+ }.freeze
11
11
 
12
12
  handle(*MAP.keys)
13
13
 
@@ -26,7 +26,7 @@ module Unparser
26
26
  def dispatch
27
27
  write(MAP.fetch(node.type))
28
28
  case children.length
29
- when 0
29
+ when 0 # rubocop:disable Lint/EmptyWhen
30
30
  when 1
31
31
  emit_single_argument
32
32
  else
@@ -33,12 +33,21 @@ module Unparser
33
33
 
34
34
  RATIONAL_FORMAT = 'i'.freeze
35
35
 
36
- MAP = IceNine.deep_freeze(
37
- Float => :float,
38
- Rational => :rational,
39
- Fixnum => :int,
40
- Bignum => :int
41
- )
36
+ MAP =
37
+ if 0.class.equal?(Integer)
38
+ IceNine.deep_freeze(
39
+ Float => :float,
40
+ Rational => :rational,
41
+ Integer => :int
42
+ )
43
+ else
44
+ IceNine.deep_freeze(
45
+ Float => :float,
46
+ Rational => :rational,
47
+ Fixnum => :int,
48
+ Bignum => :int
49
+ )
50
+ end
42
51
 
43
52
  private
44
53
 
@@ -87,7 +87,9 @@ module Unparser
87
87
  #
88
88
  def emit_normal
89
89
  emit_keyword
90
- visit(condition)
90
+ conditional_parentheses(condition.type.equal?(:block)) do
91
+ visit(condition)
92
+ end
91
93
  emit_body
92
94
  k_end
93
95
  end
@@ -74,12 +74,10 @@ module Unparser
74
74
  def emit_operation
75
75
  if arguments.empty?
76
76
  emit_regular_with_empty_args
77
+ elsif mlhs?
78
+ emit_mlhs_operation
77
79
  else
78
- if mlhs?
79
- emit_mlhs_operation
80
- else
81
- emit_normal_operation
82
- end
80
+ emit_normal_operation
83
81
  end
84
82
  end
85
83
 
@@ -2,9 +2,6 @@ module Unparser
2
2
  class Emitter
3
3
  class Send
4
4
  # Emitter for unary sends
5
- #
6
- # rubocop:disable Style/HashSyntax
7
- # ^^ is false positive
8
5
  class Unary < self
9
6
  include Unterminated
10
7
 
@@ -1,13 +1,11 @@
1
1
  require 'spec_helper'
2
-
3
- # rubocop:disable ClosingParenthesisIndentation
4
2
  describe 'Unparser on ruby corpus', mutant: false do
5
3
  ROOT = Pathname.new(__FILE__).parent.parent.parent.parent
6
4
 
7
5
  TMP = ROOT.join('tmp')
8
6
 
9
7
  class Project
10
- include Anima.new(:name, :repo_uri, :exclude)
8
+ include Anima.new(:name, :repo_uri, :repo_ref, :exclude)
11
9
 
12
10
  # Perform verification via unparser cli
13
11
  #
@@ -45,6 +43,13 @@ describe 'Unparser on ruby corpus', mutant: false do
45
43
  else
46
44
  system(%W(git clone #{repo_uri} #{repo_path}))
47
45
  end
46
+
47
+ Dir.chdir(repo_path) do
48
+ system(%W(git checkout #{repo_ref}))
49
+ system(%w(git reset --hard))
50
+ system(%w(git clean -f -d -x))
51
+ end
52
+
48
53
  self
49
54
  end
50
55
 
@@ -84,19 +89,15 @@ describe 'Unparser on ruby corpus', mutant: false do
84
89
  s(:guard, s(:primitive, Hash)),
85
90
  s(:hash_transform,
86
91
  s(:key_symbolize, :repo_uri, s(:guard, s(:primitive, String))),
92
+ s(:key_symbolize, :repo_ref, s(:guard, s(:primitive, String))),
87
93
  s(:key_symbolize, :name, s(:guard, s(:primitive, String))),
88
- s(:key_symbolize, :exclude, s(:map, s(:guard, s(:primitive, String))))
89
- ),
94
+ s(:key_symbolize, :exclude, s(:map, s(:guard, s(:primitive, String))))),
90
95
  s(:load_attribute_hash,
91
96
  # NOTE: The domain param has no DSL currently!
92
97
  Morpher::Evaluator::Transformer::Domain::Param.new(
93
98
  Project,
94
- [:repo_uri, :name, :exclude]
95
- )
96
- )
97
- )
98
- )
99
- )
99
+ [:repo_uri, :repo_ref, :name, :exclude]
100
+ )))))
100
101
  end
101
102
 
102
103
  ALL = LOADER.call(YAML.load_file(ROOT.join('spec', 'integrations.yml')))
@@ -1,36 +1,82 @@
1
1
  ---
2
2
  - name: anima
3
3
  repo_uri: 'https://github.com/mbj/anima.git'
4
+ repo_ref: 'origin/master'
4
5
  exclude: []
5
6
  - name: mutant
6
7
  repo_uri: 'https://github.com/mbj/mutant.git'
8
+ repo_ref: 'origin/master'
7
9
  exclude: []
8
10
  - name: yaks
9
11
  repo_uri: 'https://github.com/plexus/yaks.git'
12
+ repo_ref: 'origin/master'
10
13
  exclude: []
11
14
  - name: chassis
12
15
  repo_uri: 'https://github.com/ahawkins/chassis.git'
16
+ repo_ref: 'origin/master'
13
17
  exclude: []
14
18
  - name: rubyspec
15
19
  repo_uri: 'https://github.com/ruby/spec.git'
20
+ # Revision of rubyspec on the last CI build of unparser that passed
21
+ repo_ref: 'origin/master'
16
22
  exclude:
17
- # Binary encoded source subjected to limitations see Readme
18
- - core/array/pack/{b,c,h,m,u,w}_spec.rb
23
+ - command_line/fixtures/bad_syntax.rb
19
24
  - core/array/pack/shared/float.rb
20
25
  - core/array/pack/shared/integer.rb
26
+ - core/array/pack/shared/string.rb
27
+ - core/array/pack/{b,c,h,m}_spec.rb
28
+ - core/array/pack/{u,w}_spec.rb
21
29
  - core/encoding/compatible_spec.rb
30
+ - core/encoding/converter/convert_spec.rb
31
+ - core/encoding/converter/last_error_spec.rb
32
+ - core/encoding/converter/primitive_convert_spec.rb
33
+ - core/encoding/converter/primitive_errinfo_spec.rb
34
+ - core/encoding/converter/putback_spec.rb
35
+ - core/encoding/fixtures/classes.rb
36
+ - core/encoding/invalid_byte_sequence_error/error_bytes_spec.rb
37
+ - core/encoding/invalid_byte_sequence_error/incomplete_input_spec.rb
38
+ - core/encoding/invalid_byte_sequence_error/readagain_bytes_spec.rb
39
+ - core/encoding/replicate_spec.rb
22
40
  - core/env/element_reference_spec.rb
23
41
  - core/io/readpartial_spec.rb
42
+ - core/io/shared/gets_ascii.rb
43
+ - core/marshal/dump_spec.rb
44
+ - core/marshal/fixtures/marshal_data.rb
45
+ - core/marshal/shared/load.rb
46
+ - core/random/bytes_spec.rb
47
+ - core/regexp/shared/new_ascii.rb
24
48
  - core/regexp/shared/new_ascii_8bit.rb
25
49
  - core/regexp/shared/quote.rb
50
+ - core/string/byteslice_spec.rb
26
51
  - core/string/casecmp_spec.rb
27
- - core/string/unpack/{b,c,h,m,u,w}_spec.rb
52
+ - core/string/codepoints_spec.rb
53
+ - core/string/count_spec.rb
54
+ - core/string/shared/codepoints.rb
55
+ - core/string/shared/each_codepoint_without_block.rb
56
+ - core/string/shared/eql.rb
57
+ - core/string/shared/succ.rb
58
+ - core/string/squeeze_spec.rb
59
+ - core/string/unpack/{b,c,h,m}_spec.rb
28
60
  - core/string/unpack/shared/float.rb
29
61
  - core/string/unpack/shared/integer.rb
30
- - library/zlib/gzipwriter/write_spec.rb
31
- - optional/capi/integer_spec.rb
32
- # parser crashes
62
+ - core/string/unpack/{u,w}_spec.rb
33
63
  - core/symbol/casecmp_spec.rb
64
+ - core/time/_dump_spec.rb
65
+ - core/time/_load_spec.rb
66
+ - language/fixtures/squiggly_heredoc.rb
67
+ - language/regexp/encoding_spec.rb
34
68
  - language/regexp/escapes_spec.rb
35
- - library/conditionvariable/broadcast_spec.rb
36
- - library/conditionvariable/signal_spec.rb
69
+ - language/string_spec.rb
70
+ - library/digest/md5/shared/constants.rb
71
+ - library/digest/md5/shared/sample.rb
72
+ - library/digest/sha1/shared/constants.rb
73
+ - library/digest/sha256/shared/constants.rb
74
+ - library/digest/sha384/shared/constants.rb
75
+ - library/digest/sha512/shared/constants.rb
76
+ - library/openssl/shared/constants.rb
77
+ - library/socket/basicsocket/recv_spec.rb
78
+ - library/socket/socket/gethostbyname_spec.rb
79
+ - library/stringscanner/getch_spec.rb
80
+ - library/stringscanner/shared/get_byte.rb
81
+ - library/zlib/inflate/set_dictionary_spec.rb
82
+ - optional/capi/integer_spec.rb
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'parser/all'
2
3
 
3
4
  describe Unparser, mutant_expression: 'Unparser::Emitter*' do
4
5
  describe '.unparse' do
@@ -376,7 +377,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
376
377
  %w(next return break).each do |keyword|
377
378
 
378
379
  context keyword do
379
- assert_terminated "#{keyword}"
380
+ assert_terminated keyword.to_s
380
381
  assert_unterminated "#{keyword} 1"
381
382
  assert_unterminated "#{keyword} 2, 3"
382
383
  assert_unterminated "#{keyword} *nil"
@@ -1541,6 +1542,13 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
1541
1542
  3
1542
1543
  end
1543
1544
  RUBY
1545
+
1546
+ assert_source <<-'RUBY'
1547
+ while (foo do
1548
+ end)
1549
+ :body
1550
+ end
1551
+ RUBY
1544
1552
  end
1545
1553
 
1546
1554
  context 'until' do
@@ -1554,6 +1562,13 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
1554
1562
  3
1555
1563
  end
1556
1564
  RUBY
1565
+
1566
+ assert_source <<-'RUBY'
1567
+ until (foo do
1568
+ end)
1569
+ :body
1570
+ end
1571
+ RUBY
1557
1572
  end
1558
1573
 
1559
1574
  assert_source <<-'RUBY'
data/unparser.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = 'unparser'
3
- gem.version = '0.2.5'
3
+ gem.version = '0.2.6'
4
4
 
5
5
  gem.authors = ['Markus Schirp']
6
6
  gem.email = 'mbj@schirp-dso.com'
@@ -21,9 +21,9 @@ Gem::Specification.new do |gem|
21
21
  gem.add_dependency('abstract_type', '~> 0.0.7')
22
22
  gem.add_dependency('adamantium', '~> 0.2.0')
23
23
  gem.add_dependency('equalizer', '~> 0.0.9')
24
- gem.add_dependency('diff-lcs', '~> 1.2.5')
24
+ gem.add_dependency('diff-lcs', '~> 1.3')
25
25
  gem.add_dependency('concord', '~> 0.1.5')
26
- gem.add_dependency('parser', '~> 2.3.0')
26
+ gem.add_dependency('parser', '>= 2.3.1.2', '< 2.5')
27
27
  gem.add_dependency('procto', '~> 0.0.2')
28
28
 
29
29
  gem.add_development_dependency('anima', '~> 0.3.0')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unparser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markus Schirp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-24 00:00:00.000000000 Z
11
+ date: 2017-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: abstract_type
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.2.5
61
+ version: '1.3'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.2.5
68
+ version: '1.3'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: concord
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -84,16 +84,22 @@ dependencies:
84
84
  name: parser
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 2.3.1.2
90
+ - - "<"
88
91
  - !ruby/object:Gem::Version
89
- version: 2.3.0
92
+ version: '2.5'
90
93
  type: :runtime
91
94
  prerelease: false
92
95
  version_requirements: !ruby/object:Gem::Requirement
93
96
  requirements:
94
- - - "~>"
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: 2.3.1.2
100
+ - - "<"
95
101
  - !ruby/object:Gem::Version
96
- version: 2.3.0
102
+ version: '2.5'
97
103
  - !ruby/object:Gem::Dependency
98
104
  name: procto
99
105
  requirement: !ruby/object:Gem::Requirement
@@ -163,6 +169,7 @@ files:
163
169
  - ".rubocop.yml"
164
170
  - Changelog.md
165
171
  - Gemfile
172
+ - Gemfile.lock
166
173
  - LICENSE
167
174
  - README.md
168
175
  - Rakefile
@@ -278,7 +285,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
278
285
  version: '0'
279
286
  requirements: []
280
287
  rubyforge_project:
281
- rubygems_version: 2.4.5.1
288
+ rubygems_version: 2.6.11
282
289
  signing_key:
283
290
  specification_version: 4
284
291
  summary: Generate equivalent source for parser gem AST nodes
@@ -300,4 +307,3 @@ test_files:
300
307
  - spec/unit/unparser/comments/take_eol_comments_spec.rb
301
308
  - spec/unit/unparser/emitter/class_methods/handle_spec.rb
302
309
  - spec/unit/unparser_spec.rb
303
- has_rdoc: