unparser 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +38 -2
- data/.travis.yml +3 -6
- data/Changelog.md +7 -0
- data/Gemfile +1 -0
- data/Gemfile.devtools +22 -17
- data/README.md +3 -4
- data/TODO +3 -2
- data/bin/unparser +10 -0
- data/circle.yml +2 -0
- data/config/flay.yml +1 -1
- data/config/flog.yml +1 -1
- data/config/reek.yml +10 -0
- data/config/rubocop.yml +9 -17
- data/lib/unparser.rb +8 -1
- data/lib/unparser/buffer.rb +2 -0
- data/lib/unparser/cli.rb +113 -0
- data/lib/unparser/cli/differ.rb +30 -0
- data/lib/unparser/cli/preprocessor.rb +196 -0
- data/lib/unparser/cli/source.rb +118 -0
- data/lib/unparser/comments.rb +64 -23
- data/lib/unparser/constants.rb +19 -7
- data/lib/unparser/emitter.rb +23 -25
- data/lib/unparser/emitter/alias.rb +2 -0
- data/lib/unparser/emitter/argument.rb +2 -0
- data/lib/unparser/emitter/assignment.rb +3 -1
- data/lib/unparser/emitter/begin.rb +3 -6
- data/lib/unparser/emitter/binary.rb +2 -0
- data/lib/unparser/emitter/block.rb +2 -0
- data/lib/unparser/emitter/break.rb +4 -5
- data/lib/unparser/emitter/case.rb +2 -0
- data/lib/unparser/emitter/cbase.rb +2 -0
- data/lib/unparser/emitter/class.rb +4 -3
- data/lib/unparser/emitter/def.rb +2 -0
- data/lib/unparser/emitter/defined.rb +2 -0
- data/lib/unparser/emitter/empty.rb +2 -0
- data/lib/unparser/emitter/ensure.rb +2 -0
- data/lib/unparser/emitter/flipflop.rb +2 -0
- data/lib/unparser/emitter/for.rb +2 -0
- data/lib/unparser/emitter/hookexe.rb +2 -0
- data/lib/unparser/emitter/if.rb +2 -0
- data/lib/unparser/emitter/literal.rb +2 -0
- data/lib/unparser/emitter/literal/array.rb +33 -0
- data/lib/unparser/emitter/literal/dynamic.rb +21 -1
- data/lib/unparser/emitter/literal/dynamic_body.rb +9 -5
- data/lib/unparser/emitter/literal/execute_string.rb +2 -0
- data/lib/unparser/emitter/literal/hash.rb +136 -0
- data/lib/unparser/emitter/literal/primitive.rb +4 -2
- data/lib/unparser/emitter/literal/range.rb +2 -0
- data/lib/unparser/emitter/literal/regexp.rb +4 -2
- data/lib/unparser/emitter/literal/singleton.rb +2 -0
- data/lib/unparser/emitter/match.rb +2 -0
- data/lib/unparser/emitter/module.rb +2 -3
- data/lib/unparser/emitter/next.rb +2 -0
- data/lib/unparser/emitter/op_assign.rb +3 -1
- data/lib/unparser/emitter/redo.rb +2 -0
- data/lib/unparser/emitter/repetition.rb +2 -0
- data/lib/unparser/emitter/resbody.rb +2 -0
- data/lib/unparser/emitter/rescue.rb +2 -0
- data/lib/unparser/emitter/retry.rb +2 -0
- data/lib/unparser/emitter/return.rb +19 -4
- data/lib/unparser/emitter/root.rb +13 -0
- data/lib/unparser/emitter/send.rb +26 -22
- data/lib/unparser/emitter/send/arguments.rb +46 -0
- data/lib/unparser/emitter/send/attribute_assignment.rb +35 -0
- data/lib/unparser/emitter/send/binary.rb +2 -0
- data/lib/unparser/emitter/send/index.rb +2 -0
- data/lib/unparser/emitter/send/regular.rb +4 -2
- data/lib/unparser/emitter/send/unary.rb +3 -1
- data/lib/unparser/emitter/splat.rb +2 -0
- data/lib/unparser/emitter/super.rb +2 -0
- data/lib/unparser/emitter/undef.rb +2 -0
- data/lib/unparser/emitter/variable.rb +2 -0
- data/lib/unparser/emitter/yield.rb +2 -0
- data/lib/unparser/finalize.rb +2 -0
- data/lib/unparser/node_helpers.rb +19 -0
- data/spec/spec_helper.rb +10 -0
- data/spec/unit/unparser/buffer/append_spec.rb +2 -0
- data/spec/unit/unparser/buffer/append_without_prefix_spec.rb +2 -0
- data/spec/unit/unparser/buffer/capture_content_spec.rb +2 -0
- data/spec/unit/unparser/buffer/content_spec.rb +3 -1
- data/spec/unit/unparser/buffer/fresh_line_spec.rb +2 -0
- data/spec/unit/unparser/buffer/indent_spec.rb +3 -1
- data/spec/unit/unparser/buffer/nl_spec.rb +2 -0
- data/spec/unit/unparser/buffer/unindent_spec.rb +2 -0
- data/spec/unit/unparser/comments/consume_spec.rb +2 -1
- data/spec/unit/unparser/comments/take_all_spec.rb +2 -1
- data/spec/unit/unparser/comments/take_before_spec.rb +6 -5
- data/spec/unit/unparser/comments/take_eol_comments_spec.rb +2 -1
- data/spec/unit/unparser/emitter/class_methods/handle_spec.rb +2 -0
- data/spec/unit/unparser_spec.rb +110 -57
- data/unparser.gemspec +5 -4
- metadata +32 -12
- data/bin/test-unparser +0 -26
- data/lib/unparser/emitter/literal/composed.rb +0 -64
- data/spec/unit/unparser/comments/skip_eol_comment_spec.rb +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b62c76f077c1633ea95d4b674eef40c4862bd841
|
4
|
+
data.tar.gz: 77d01fff24751db00c267068880942f8df8a588a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0cf99eb3262e4d55e8899a1c924d5388cdb55d5991ce33da2ac2717a9cdf8c9bccabaf56c316c8615184627ede859e2cdbfe2472507a7d6985c7ead2e57c26f
|
7
|
+
data.tar.gz: 7b78d0c2cdedf07d26f7f7f166587a08f2142be202de2fe1bba51b6ce3a12aff60f0abdb8164342b4b7ae3c516959ae580e83c33e266263c46b6d5e2bdd584a7
|
data/.gitignore
CHANGED
@@ -1,2 +1,38 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
## MAC OS
|
2
|
+
.DS_Store
|
3
|
+
|
4
|
+
## TEXTMATE
|
5
|
+
*.tmproj
|
6
|
+
tmtags
|
7
|
+
|
8
|
+
## EMACS
|
9
|
+
*~
|
10
|
+
\#*
|
11
|
+
.\#*
|
12
|
+
|
13
|
+
## VIM
|
14
|
+
*.sw[op]
|
15
|
+
|
16
|
+
## Rubinius
|
17
|
+
*.rbc
|
18
|
+
.rbx
|
19
|
+
|
20
|
+
## PROJECT::GENERAL
|
21
|
+
*.gem
|
22
|
+
coverage
|
23
|
+
profiling
|
24
|
+
turbulence
|
25
|
+
rdoc
|
26
|
+
pkg
|
27
|
+
tmp
|
28
|
+
doc
|
29
|
+
log
|
30
|
+
.yardoc
|
31
|
+
measurements
|
32
|
+
|
33
|
+
## BUNDLER
|
34
|
+
.bundle
|
35
|
+
Gemfile.lock
|
36
|
+
|
37
|
+
## PROJECT::SPECIFIC
|
38
|
+
/vendor
|
data/.travis.yml
CHANGED
data/Changelog.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
# v0.1.6 2013-12-31
|
2
|
+
|
3
|
+
* Emit 1.9 style hashes where possible: https://github.com/mbj/unparser/pull/23
|
4
|
+
* Fix invalid quoting of hash keys: https://github.com/mbj/unparser/issues/22
|
5
|
+
* Fix crash on take before introduced by code refactorings: https://github.com/mbj/unparser/issues/20
|
6
|
+
* Fix crash on comment reproduction https://github.com/mbj/unparser/issues/17
|
7
|
+
|
1
8
|
# v0.1.5 2013-11-01
|
2
9
|
|
3
10
|
* Fix crash with comment reproduction.
|
data/Gemfile
CHANGED
data/Gemfile.devtools
CHANGED
@@ -4,21 +4,24 @@ group :development do
|
|
4
4
|
gem 'rake', '~> 10.1.0'
|
5
5
|
gem 'rspec', '~> 2.14.1'
|
6
6
|
gem 'yard', '~> 0.8.7'
|
7
|
+
|
8
|
+
platform :rbx do
|
9
|
+
gem 'rubysl-singleton', '~> 2.0.0'
|
10
|
+
end
|
7
11
|
end
|
8
12
|
|
9
13
|
group :yard do
|
10
|
-
gem 'kramdown', '~> 1.
|
14
|
+
gem 'kramdown', '~> 1.3.0'
|
11
15
|
end
|
12
16
|
|
13
17
|
group :guard do
|
14
|
-
gem 'guard', '~>
|
15
|
-
gem 'guard-bundler', '~>
|
16
|
-
gem 'guard-rspec', '~>
|
17
|
-
gem 'guard-rubocop', '~> 0.
|
18
|
-
gem 'guard-mutant', '~> 0.0.1'
|
18
|
+
gem 'guard', '~> 2.2.4'
|
19
|
+
gem 'guard-bundler', '~> 2.0.0'
|
20
|
+
gem 'guard-rspec', '~> 4.2.0'
|
21
|
+
gem 'guard-rubocop', '~> 1.0.0'
|
19
22
|
|
20
23
|
# file system change event handling
|
21
|
-
gem 'listen', '~>
|
24
|
+
gem 'listen', '~> 2.4.0'
|
22
25
|
gem 'rb-fchange', '~> 0.0.6', require: false
|
23
26
|
gem 'rb-fsevent', '~> 0.9.3', require: false
|
24
27
|
gem 'rb-inotify', '~> 0.9.0', require: false
|
@@ -32,24 +35,26 @@ end
|
|
32
35
|
group :metrics do
|
33
36
|
gem 'coveralls', '~> 0.7.0'
|
34
37
|
gem 'flay', '~> 2.4.0'
|
35
|
-
gem 'flog', '~> 4.
|
38
|
+
gem 'flog', '~> 4.2.0'
|
36
39
|
gem 'reek', '~> 1.3.2'
|
37
|
-
gem 'rubocop', '~> 0.
|
38
|
-
gem 'simplecov', '~> 0.
|
40
|
+
gem 'rubocop', '~> 0.16.0'
|
41
|
+
gem 'simplecov', '~> 0.8.2'
|
39
42
|
gem 'yardstick', '~> 0.9.7', git: 'https://github.com/dkubb/yardstick.git'
|
40
43
|
|
41
44
|
platforms :ruby_19, :ruby_20 do
|
42
|
-
gem 'mutant', git: 'https://github.com/mbj/mutant.git'
|
45
|
+
gem 'mutant', '~> 0.3.0', git: 'https://github.com/mbj/mutant.git'
|
43
46
|
gem 'yard-spellcheck', '~> 0.1.5'
|
44
47
|
end
|
48
|
+
|
49
|
+
platform :rbx do
|
50
|
+
gem 'json', '~> 1.8.1'
|
51
|
+
gem 'racc', '~> 1.4.10'
|
52
|
+
gem 'rubysl-logger', '~> 2.0.0'
|
53
|
+
gem 'rubysl-open-uri', '~> 2.0.0'
|
54
|
+
gem 'rubysl-prettyprint', '~> 2.0.2'
|
55
|
+
end
|
45
56
|
end
|
46
57
|
|
47
58
|
group :benchmarks do
|
48
59
|
gem 'rbench', '~> 0.2.3'
|
49
60
|
end
|
50
|
-
|
51
|
-
platform :jruby do
|
52
|
-
group :jruby do
|
53
|
-
gem 'jruby-openssl', '~> 0.8.5'
|
54
|
-
end
|
55
|
-
end
|
data/README.md
CHANGED
@@ -7,11 +7,10 @@ unparser
|
|
7
7
|
|
8
8
|
Generate equivalent source for ASTs from whitequarks awesome [parser](https://github.com/whitequark/parser).
|
9
9
|
|
10
|
-
This library is
|
11
|
-
|
12
|
-
[mutant](https://github.cm/mbj/mutant) mutators and the in-memory vendoring for self hosting mutant.
|
10
|
+
This library is able to reproduce 100% of ruby 1.9 and 2.0 syntax. Including its own source code.
|
11
|
+
It serves well for [mutant](https://github.cm/mbj/mutant) mutators and the in-memory vendoring for self hosting.
|
13
12
|
|
14
|
-
This library dropped the reproduction of 1.8 syntax in the 0.1.0 release.
|
13
|
+
This library dropped the reproduction of 1.8 syntax in the 0.1.0 release. It currently does not have support for 2.1 specific syntax.
|
15
14
|
|
16
15
|
Usage
|
17
16
|
-----
|
data/TODO
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
-
*
|
1
|
+
* Create an AST preprocessor that creates virtual nodes,
|
2
|
+
removing the need for explicit backreferencing and special cases in the emitter
|
3
|
+
classes.
|
2
4
|
* Remove duplicated logic with empty or non empty bodies
|
3
|
-
* Handle kwbegin and begin separately
|
data/bin/unparser
ADDED
data/circle.yml
CHANGED
data/config/flay.yml
CHANGED
data/config/flog.yml
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
---
|
2
|
-
threshold:
|
2
|
+
threshold: 24.5
|
data/config/reek.yml
CHANGED
@@ -36,8 +36,13 @@ LongParameterList:
|
|
36
36
|
FeatureEnvy:
|
37
37
|
exclude:
|
38
38
|
- Unparser::Emitter::Literal::Regexp#escape # TODO Fixme!
|
39
|
+
- Unparser::Emitter::Send::Arguments#effective_arguments # False positive
|
39
40
|
- Unparser::Emitter::Send#binary_receiver?
|
40
41
|
- Unparser::Emitter#visit_terminated
|
42
|
+
- Unparser::CLI#add_options
|
43
|
+
- Unparser::CLI::Source#error_report
|
44
|
+
- Unparser::CLI::Preprocessor::Dstr#collapsed_children
|
45
|
+
- Unparser::Comments#take_before
|
41
46
|
enabled: true
|
42
47
|
ClassVariable:
|
43
48
|
exclude: []
|
@@ -60,11 +65,15 @@ NestedIterators:
|
|
60
65
|
exclude:
|
61
66
|
- Unparser::Emitter#self.children
|
62
67
|
- Unparser::Emitter::Literal::Regexp#dispatch
|
68
|
+
- Unparser::Emitter::Return#emit_break_return_arguments
|
69
|
+
- Unparser::CLI::Preprocessor::Dstr#collapsed_children
|
63
70
|
enabled: true
|
64
71
|
max_allowed_nesting: 1
|
65
72
|
TooManyStatements:
|
66
73
|
max_statements: 6
|
67
74
|
enabled: true
|
75
|
+
exclude:
|
76
|
+
- Unparser::CLI::Source#error_report
|
68
77
|
DuplicateMethodCall:
|
69
78
|
allow_calls: []
|
70
79
|
exclude: []
|
@@ -91,6 +100,7 @@ RepeatedConditional:
|
|
91
100
|
- Unparser::Comments # FIXME
|
92
101
|
- Unparser::Emitter::Send # TODO Fixme
|
93
102
|
- Unparser::Emitter::If
|
103
|
+
- Unparser::CLI # False positive
|
94
104
|
enabled: true
|
95
105
|
max_ifs: 1
|
96
106
|
DataClump:
|
data/config/rubocop.yml
CHANGED
@@ -28,21 +28,12 @@ CollectionMethods:
|
|
28
28
|
find: 'detect'
|
29
29
|
find_all: 'select'
|
30
30
|
|
31
|
-
# Do not force public/protected/private keyword to be indented at the same
|
32
|
-
# level as the def keyword. My personal preference is to outdent these keywords
|
33
|
-
# because I think when scanning code it makes it easier to identify the
|
34
|
-
# sections of code and visually separate them. When the keyword is at the same
|
35
|
-
# level I think it sort of blends in with the def keywords and makes it harder
|
36
|
-
# to scan the code and see where the sections are.
|
37
|
-
AccessControl:
|
38
|
-
Enabled: false
|
39
|
-
|
40
31
|
# Limit line length
|
41
32
|
LineLength:
|
42
33
|
Max: 113 # TODO: lower to 79 once the rubocop branch in shared/Gemfile is removed
|
43
34
|
|
44
35
|
ClassLength:
|
45
|
-
Max:
|
36
|
+
Max: 204
|
46
37
|
|
47
38
|
# Disabled because of indenting with private keyword in class bodies.
|
48
39
|
IndentationWidth:
|
@@ -52,13 +43,6 @@ IndentationWidth:
|
|
52
43
|
SignalException:
|
53
44
|
Enabled: false
|
54
45
|
|
55
|
-
# Disable Symbol cop because unparse has to prodice "WIERD" symbols in his specs
|
56
|
-
#
|
57
|
-
# I'd love I could ignore a specific occurance.
|
58
|
-
#
|
59
|
-
SymbolName:
|
60
|
-
Enabled: false
|
61
|
-
|
62
46
|
# False positive in unparser source
|
63
47
|
OneLineConditional:
|
64
48
|
Enabled: false
|
@@ -89,3 +73,11 @@ TrivialAccessors:
|
|
89
73
|
# Do not prefer do/end over {} for multiline blocks
|
90
74
|
Blocks:
|
91
75
|
Enabled: false
|
76
|
+
|
77
|
+
# I like to have an empty line before closing the currently opened body
|
78
|
+
EmptyLinesAroundBody:
|
79
|
+
Enabled: false
|
80
|
+
|
81
|
+
# I like my style more
|
82
|
+
AccessModifierIndentation:
|
83
|
+
Enabled: false
|
data/lib/unparser.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
require 'abstract_type'
|
4
|
+
require 'procto'
|
2
5
|
require 'concord'
|
3
6
|
require 'parser/all'
|
4
7
|
|
@@ -47,6 +50,7 @@ module Unparser
|
|
47
50
|
end # Unparser
|
48
51
|
|
49
52
|
require 'unparser/buffer'
|
53
|
+
require 'unparser/node_helpers'
|
50
54
|
require 'unparser/comments'
|
51
55
|
require 'unparser/constants'
|
52
56
|
require 'unparser/emitter'
|
@@ -55,7 +59,8 @@ require 'unparser/emitter/literal/primitive'
|
|
55
59
|
require 'unparser/emitter/literal/singleton'
|
56
60
|
require 'unparser/emitter/literal/dynamic'
|
57
61
|
require 'unparser/emitter/literal/regexp'
|
58
|
-
require 'unparser/emitter/literal/
|
62
|
+
require 'unparser/emitter/literal/array'
|
63
|
+
require 'unparser/emitter/literal/hash'
|
59
64
|
require 'unparser/emitter/literal/range'
|
60
65
|
require 'unparser/emitter/literal/dynamic_body'
|
61
66
|
require 'unparser/emitter/literal/execute_string'
|
@@ -64,6 +69,8 @@ require 'unparser/emitter/send/unary'
|
|
64
69
|
require 'unparser/emitter/send/binary'
|
65
70
|
require 'unparser/emitter/send/index'
|
66
71
|
require 'unparser/emitter/send/regular'
|
72
|
+
require 'unparser/emitter/send/arguments'
|
73
|
+
require 'unparser/emitter/send/attribute_assignment'
|
67
74
|
require 'unparser/emitter/block'
|
68
75
|
require 'unparser/emitter/assignment'
|
69
76
|
require 'unparser/emitter/variable'
|
data/lib/unparser/buffer.rb
CHANGED
data/lib/unparser/cli.rb
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'unparser'
|
4
|
+
require 'mutant'
|
5
|
+
require 'optparse'
|
6
|
+
|
7
|
+
require 'unparser/cli/preprocessor'
|
8
|
+
require 'unparser/cli/source'
|
9
|
+
require 'unparser/cli/differ'
|
10
|
+
|
11
|
+
module Unparser
|
12
|
+
# Unparser CLI implementation
|
13
|
+
class CLI
|
14
|
+
|
15
|
+
EXIT_SUCCESS = 0
|
16
|
+
EXIT_FAILURE = 1
|
17
|
+
|
18
|
+
# Run CLI
|
19
|
+
#
|
20
|
+
# @param [Array<String>] arguments
|
21
|
+
#
|
22
|
+
# @return [Fixnum]
|
23
|
+
# the exit status
|
24
|
+
#
|
25
|
+
# @api private
|
26
|
+
#
|
27
|
+
def self.run(*arguments)
|
28
|
+
new(*arguments).exit_status
|
29
|
+
end
|
30
|
+
|
31
|
+
# Initialize object
|
32
|
+
#
|
33
|
+
# @param [Array<String>] arguments
|
34
|
+
#
|
35
|
+
# @return [undefined]
|
36
|
+
#
|
37
|
+
# @api private
|
38
|
+
#
|
39
|
+
def initialize(arguments)
|
40
|
+
@sources = []
|
41
|
+
|
42
|
+
@success = true
|
43
|
+
@fail_fast = false
|
44
|
+
|
45
|
+
opts = OptionParser.new do |builder|
|
46
|
+
add_options(builder)
|
47
|
+
end
|
48
|
+
|
49
|
+
file_names = opts.parse!(arguments)
|
50
|
+
|
51
|
+
file_names.each do |file_name|
|
52
|
+
@sources << Source::File.new(file_name)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Add options
|
57
|
+
#
|
58
|
+
# @param [Optparse::Builder] builder
|
59
|
+
#
|
60
|
+
# @return [undefined]
|
61
|
+
#
|
62
|
+
# @api private
|
63
|
+
#
|
64
|
+
def add_options(builder)
|
65
|
+
builder.banner = 'usage: unparse [options] FILE [FILE]'
|
66
|
+
builder.separator('')
|
67
|
+
builder.on('-e', '--evaluate SOURCE') do |original_source|
|
68
|
+
@sources << Source::String.new(original_source)
|
69
|
+
end
|
70
|
+
builder.on('--fail-fast') do
|
71
|
+
@fail_fast = true
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# Return exit status
|
76
|
+
#
|
77
|
+
# @return [Fixnum]
|
78
|
+
#
|
79
|
+
# @api private
|
80
|
+
#
|
81
|
+
def exit_status
|
82
|
+
@sources.each do |source|
|
83
|
+
process_source(source)
|
84
|
+
if @fail_fast
|
85
|
+
break unless @success
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
@success ? EXIT_SUCCESS : EXIT_FAILURE
|
90
|
+
end
|
91
|
+
|
92
|
+
private
|
93
|
+
|
94
|
+
# Process source
|
95
|
+
#
|
96
|
+
# @param [CLI::Source]
|
97
|
+
#
|
98
|
+
# @return [undefined]
|
99
|
+
#
|
100
|
+
# @api private
|
101
|
+
#
|
102
|
+
def process_source(source)
|
103
|
+
if source.success?
|
104
|
+
puts "Success: #{source.identification}"
|
105
|
+
else
|
106
|
+
puts source.error_report
|
107
|
+
puts "Error: #{source.identification}"
|
108
|
+
@success = false
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
end # CLI
|
113
|
+
end # Unparser
|