transpec 1.9.3 → 1.10.0
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 +4 -4
- data/.rubocop.yml +1 -1
- data/.travis.yml +1 -1
- data/CHANGELOG.md +5 -0
- data/CONTRIBUTING.md +19 -0
- data/README.md +78 -9
- data/README.md.erb +68 -10
- data/lib/transpec/annotatable.rb +16 -0
- data/lib/transpec/cli.rb +35 -27
- data/lib/transpec/configuration.rb +1 -0
- data/lib/transpec/conversion_error.rb +23 -0
- data/lib/transpec/converter.rb +59 -50
- data/lib/transpec/dynamic_analyzer.rb +13 -29
- data/lib/transpec/dynamic_analyzer/rewriter.rb +3 -10
- data/lib/transpec/dynamic_analyzer/runtime_data.rb +16 -8
- data/lib/transpec/file_finder.rb +1 -1
- data/lib/transpec/git.rb +1 -1
- data/lib/transpec/option_parser.rb +12 -10
- data/lib/transpec/project.rb +3 -3
- data/lib/transpec/record.rb +19 -2
- data/lib/transpec/report.rb +29 -13
- data/lib/transpec/rspec_version.rb +7 -7
- data/lib/transpec/static_context_inspector.rb +1 -5
- data/lib/transpec/syntax.rb +11 -16
- data/lib/transpec/syntax/be_boolean.rb +1 -1
- data/lib/transpec/syntax/be_close.rb +1 -1
- data/lib/transpec/syntax/current_example.rb +88 -0
- data/lib/transpec/syntax/double.rb +1 -1
- data/lib/transpec/syntax/example.rb +60 -54
- data/lib/transpec/syntax/have.rb +27 -15
- data/lib/transpec/syntax/have/have_record.rb +12 -0
- data/lib/transpec/syntax/have/source_builder.rb +18 -16
- data/lib/transpec/syntax/its.rb +12 -11
- data/lib/transpec/syntax/matcher_definition.rb +1 -1
- data/lib/transpec/syntax/method_stub.rb +3 -7
- data/lib/transpec/syntax/mixin/matcher_owner.rb +2 -2
- data/lib/transpec/syntax/mixin/monkey_patch.rb +3 -5
- data/lib/transpec/syntax/mixin/monkey_patch_any_instance.rb +2 -4
- data/lib/transpec/syntax/mixin/owned_matcher.rb +1 -4
- data/lib/transpec/syntax/mixin/send.rb +7 -9
- data/lib/transpec/syntax/oneliner_should.rb +4 -4
- data/lib/transpec/syntax/operator.rb +27 -11
- data/lib/transpec/syntax/pending.rb +110 -0
- data/lib/transpec/syntax/raise_error.rb +1 -1
- data/lib/transpec/syntax/receive.rb +4 -4
- data/lib/transpec/syntax/rspec_configure/framework.rb +3 -3
- data/lib/transpec/syntax/should.rb +2 -2
- data/lib/transpec/syntax/should_receive.rb +3 -3
- data/lib/transpec/util.rb +38 -6
- data/lib/transpec/version.rb +2 -2
- data/spec/support/file_helper.rb +1 -1
- data/spec/support/shared_context.rb +3 -8
- data/spec/transpec/cli_spec.rb +63 -1
- data/spec/transpec/configuration_spec.rb +1 -0
- data/spec/transpec/converter_spec.rb +106 -15
- data/spec/transpec/dynamic_analyzer/rewriter_spec.rb +12 -52
- data/spec/transpec/dynamic_analyzer_spec.rb +2 -2
- data/spec/transpec/option_parser_spec.rb +3 -2
- data/spec/transpec/report_spec.rb +33 -4
- data/spec/transpec/rspec_version_spec.rb +5 -2
- data/spec/transpec/syntax/current_example_spec.rb +267 -0
- data/spec/transpec/syntax/example_spec.rb +156 -122
- data/spec/transpec/syntax/have_spec.rb +43 -32
- data/spec/transpec/syntax/method_stub_spec.rb +8 -0
- data/spec/transpec/syntax/operator_spec.rb +67 -2
- data/spec/transpec/syntax/pending_spec.rb +375 -0
- metadata +12 -4
- data/lib/transpec/context_error.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6746cd9c37b13d9dcf9c77b423146988dc76fc05
|
4
|
+
data.tar.gz: 9741bc313663316ea54b25eff57abce0aa3b8440
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8794a9d4a01800a80b7a7ab09c29418d2b27a55978263d655ea7f81ac8c2e7babbdacb306caef3a1086dba283c67bb7ec81b8a48267de1b3f3758eff7be57eeb
|
7
|
+
data.tar.gz: 531aca6df23e26d22e048231c6393c044e13137d753924b568a25ee7e11a81d57271ac652c93e403001fd65cc23f79cb3de2f4710f7496fed39521b6277d10e1
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,11 @@
|
|
2
2
|
|
3
3
|
## Development
|
4
4
|
|
5
|
+
## v1.10.0
|
6
|
+
|
7
|
+
* Support conversion of pending examples
|
8
|
+
* Display cautions for less-accurate conversions caused by a lack of runtime information ([#42](https://github.com/yujinakayama/transpec/issues/42))
|
9
|
+
|
5
10
|
## v1.9.3
|
6
11
|
|
7
12
|
* Handle `variable.any_instance` ([#46](https://github.com/yujinakayama/transpec/issues/46))
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
If you're going to report an issue or submit a pull requrest, please follow these guidelines.
|
4
|
+
|
5
|
+
## Reporting an Issue
|
6
|
+
|
7
|
+
* Provide the problematic code or the project's URL.
|
8
|
+
* Include the version of Ruby you're using (`ruby --version`).
|
9
|
+
* Include the version of Transpec you're using (`transpec --version`).
|
10
|
+
* Include complete command-line options you passed to `transpec`.
|
11
|
+
|
12
|
+
## Pull Requests
|
13
|
+
|
14
|
+
* Add tests for your change unless it's a refactoring.
|
15
|
+
* Run `bundle exec rake`. If any failing test or code style issue is reported, fix it.
|
16
|
+
* If you're going to modify the content of `README.md`:
|
17
|
+
* Edit `README.md.erb` instead.
|
18
|
+
* Run `bundle exec rake readme`. This will generate `README.md` from `README.md.erb`.
|
19
|
+
* Commit both files.
|
data/README.md
CHANGED
@@ -197,7 +197,7 @@ Running dynamic analysis with command "bundle exec rspec"...
|
|
197
197
|
|
198
198
|
### `-s/--skip-dynamic-analysis`
|
199
199
|
|
200
|
-
Skip dynamic analysis and convert with only static analysis. Note that specifying this option decreases the conversion accuracy.
|
200
|
+
Skip dynamic analysis and convert with only static analysis. Note that specifying this option decreases the conversion accuracy especially in the conversion of [`have(n).items` matcher](#havenitems-matcher).
|
201
201
|
|
202
202
|
### `-c/--rspec-command`
|
203
203
|
|
@@ -207,6 +207,12 @@ Transpec needs to run your specs in a copied project directory for dynamic analy
|
|
207
207
|
If your project requires some special setup or commands to run specs, use this option.
|
208
208
|
`bundle exec rspec` is used by default.
|
209
209
|
|
210
|
+
Note that the command to run dynamic analysis does _not_ affect to the files or specs to be converted.
|
211
|
+
This means that even if you specify a command that only runs a subset of the files in your spec suite or a subset of the specs in a file, every spec will be converted.
|
212
|
+
For this reason, it's recommended to provide a command that runs full spec suite to `-c/--rspec-command`.
|
213
|
+
If you want to convert only a subset of the files in a spec suite, pass the paths to `transpec`.
|
214
|
+
See [Advanced Usage](#advanced-usage) for more details.
|
215
|
+
|
210
216
|
```bash
|
211
217
|
$ transpec --rspec-command "./special_setup.sh && bundle exec rspec"
|
212
218
|
```
|
@@ -232,6 +238,7 @@ Type | Target Syntax | Converted Syntax
|
|
232
238
|
`stub` | `obj.stub(:message)` | `allow(obj).to receive(:message)`
|
233
239
|
`have_items` | `expect(obj).to have(n).items` | `expect(obj.size).to eq(n)`
|
234
240
|
`its` | `its(:attr) { }` | `describe '#attr' { subject { }; it { } }`
|
241
|
+
`pending` | `pending 'is an example' { }` | `skip 'is an example' { }`
|
235
242
|
`deprecated` | All other deprecated syntaxes | Latest syntaxes
|
236
243
|
|
237
244
|
See [Supported Conversions](#supported-conversions) for more details.
|
@@ -427,6 +434,7 @@ The one-liner (implicit receiver) `should`:
|
|
427
434
|
* [Useless `and_return`](#useless-and_return)
|
428
435
|
* [`any_instance` implementation blocks](#any_instance-implementation-blocks)
|
429
436
|
* [Deprecated test double aliases](#deprecated-test-double-aliases)
|
437
|
+
* [Pending examples](#pending-examples)
|
430
438
|
* [Current example object](#current-example-object)
|
431
439
|
* [Custom matcher DSL](#custom-matcher-dsl)
|
432
440
|
|
@@ -1017,6 +1025,75 @@ double('something')
|
|
1017
1025
|
* Deprecation: deprecated since RSpec 2.14, removed in RSpec 3.0
|
1018
1026
|
* See also: [myronmarston / why_double.md - Gist](https://gist.github.com/myronmarston/6576665)
|
1019
1027
|
|
1028
|
+
### Pending examples
|
1029
|
+
|
1030
|
+
**This conversion is available only if your project's RSpec is `>= 2.99.0.beta1` and `< 3.0.0.beta1`.**
|
1031
|
+
|
1032
|
+
Targets:
|
1033
|
+
|
1034
|
+
```ruby
|
1035
|
+
describe 'example' do
|
1036
|
+
it 'is skipped', :pending => true do
|
1037
|
+
do_something_possibly_fail # This won't be run
|
1038
|
+
end
|
1039
|
+
|
1040
|
+
pending 'is skipped' do
|
1041
|
+
do_something_possibly_fail # This won't be run
|
1042
|
+
end
|
1043
|
+
|
1044
|
+
it 'is skipped' do
|
1045
|
+
pending
|
1046
|
+
do_something_possibly_fail # This won't be run
|
1047
|
+
end
|
1048
|
+
|
1049
|
+
it 'is run and expected to fail' do
|
1050
|
+
pending do
|
1051
|
+
do_something_surely_fail # This will be run and expected to fail
|
1052
|
+
end
|
1053
|
+
end
|
1054
|
+
end
|
1055
|
+
```
|
1056
|
+
|
1057
|
+
Will be converted to:
|
1058
|
+
|
1059
|
+
```ruby
|
1060
|
+
describe 'example' do
|
1061
|
+
it 'is skipped', :skip => true do
|
1062
|
+
do_something_possibly_fail # This won't be run
|
1063
|
+
end
|
1064
|
+
|
1065
|
+
skip 'is skipped' do
|
1066
|
+
do_something_possibly_fail # This won't be run
|
1067
|
+
end
|
1068
|
+
|
1069
|
+
it 'is skipped' do
|
1070
|
+
skip
|
1071
|
+
do_something_possibly_fail # This won't be run
|
1072
|
+
end
|
1073
|
+
|
1074
|
+
it 'is run and expected to fail' do
|
1075
|
+
pending # #pending with block is no longer supported
|
1076
|
+
do_something_surely_fail # This will be run and expected to fail
|
1077
|
+
end
|
1078
|
+
end
|
1079
|
+
```
|
1080
|
+
|
1081
|
+
Here's an excerpt from [the warning](https://github.com/rspec/rspec-core/blob/v2.99.0.beta2/lib/rspec/core/example_group.rb#L67-L75) for pending examples in RSpec 2.99:
|
1082
|
+
|
1083
|
+
> The semantics of `RSpec::Core::ExampleGroup#pending` are changing in RSpec 3.
|
1084
|
+
> In RSpec 2.x, it caused the example to be skipped. In RSpec 3, the example will
|
1085
|
+
> still be run but is expected to fail, and will be marked as a failure (rather
|
1086
|
+
> than as pending) if the example passes, just like how `pending` with a block
|
1087
|
+
> from within an example already works.
|
1088
|
+
>
|
1089
|
+
> To keep the same skip semantics, change `pending` to `skip`. Otherwise, if you
|
1090
|
+
> want the new RSpec 3 behavior, you can safely ignore this warning and continue
|
1091
|
+
> to upgrade to RSpec 3 without addressing it.
|
1092
|
+
|
1093
|
+
* This conversion can be disabled by: `--keep pending`
|
1094
|
+
* Deprecation: not deprecated but the behavior changes in RSpec 3.0
|
1095
|
+
* See also: [Feature request: shortcut for pending-block within it · rspec/rspec-core](https://github.com/rspec/rspec-core/issues/1208)
|
1096
|
+
|
1020
1097
|
### Current example object
|
1021
1098
|
|
1022
1099
|
**This conversion is available only if your project's RSpec is `2.99.0.beta1` or later.**
|
@@ -1111,14 +1188,6 @@ end
|
|
1111
1188
|
|
1112
1189
|
Tested on MRI 1.9, 2.0, 2.1 and JRuby in 1.9 mode.
|
1113
1190
|
|
1114
|
-
## Contributing
|
1115
|
-
|
1116
|
-
1. Fork it
|
1117
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
1118
|
-
3. Commit your changes (`git commit -am 'Add some feature'`)
|
1119
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
1120
|
-
5. Create new Pull Request
|
1121
|
-
|
1122
1191
|
## License
|
1123
1192
|
|
1124
1193
|
Copyright (c) 2013 Yuji Nakayama
|
data/README.md.erb
CHANGED
@@ -171,7 +171,7 @@ Running dynamic analysis with command "bundle exec rspec"...
|
|
171
171
|
|
172
172
|
### `-s/--skip-dynamic-analysis`
|
173
173
|
|
174
|
-
Skip dynamic analysis and convert with only static analysis. Note that specifying this option decreases the conversion accuracy.
|
174
|
+
Skip dynamic analysis and convert with only static analysis. Note that specifying this option decreases the conversion accuracy especially in the conversion of [`have(n).items` matcher](#havenitems-matcher).
|
175
175
|
|
176
176
|
### `-c/--rspec-command`
|
177
177
|
|
@@ -181,6 +181,12 @@ Transpec needs to run your specs in a copied project directory for dynamic analy
|
|
181
181
|
If your project requires some special setup or commands to run specs, use this option.
|
182
182
|
`bundle exec rspec` is used by default.
|
183
183
|
|
184
|
+
Note that the command to run dynamic analysis does _not_ affect to the files or specs to be converted.
|
185
|
+
This means that even if you specify a command that only runs a subset of the files in your spec suite or a subset of the specs in a file, every spec will be converted.
|
186
|
+
For this reason, it's recommended to provide a command that runs full spec suite to `-c/--rspec-command`.
|
187
|
+
If you want to convert only a subset of the files in a spec suite, pass the paths to `transpec`.
|
188
|
+
See [Advanced Usage](#advanced-usage) for more details.
|
189
|
+
|
184
190
|
```bash
|
185
191
|
$ transpec --rspec-command "./special_setup.sh && bundle exec rspec"
|
186
192
|
```
|
@@ -208,6 +214,7 @@ conversion_type_table = <<END
|
|
208
214
|
`stub` | `obj.stub(:message)` | `allow(obj).to receive(:message)`
|
209
215
|
`have_items` | `expect(obj).to have(n).items` | `expect(obj.size).to eq(n)`
|
210
216
|
`its` | `its(:attr) { }` | `describe '#attr' { subject { }; it { } }`
|
217
|
+
`pending` | `pending 'is an example' { }` | `skip 'is an example' { }`
|
211
218
|
`deprecated` | All other deprecated syntaxes | Latest syntaxes
|
212
219
|
END
|
213
220
|
|
@@ -886,7 +893,7 @@ Will be converted to:
|
|
886
893
|
|
887
894
|
### `any_instance` implementation blocks
|
888
895
|
|
889
|
-
**This conversion is available only if your project's RSpec is `>= <%= Transpec::RSpecVersion::
|
896
|
+
**This conversion is available only if your project's RSpec is `>= <%= Transpec::RSpecVersion::RSPEC_2_99 %>` and `< <%= Transpec::RSpecVersion::RSPEC_3_0 %>`.**
|
890
897
|
|
891
898
|
Targets:
|
892
899
|
|
@@ -967,6 +974,65 @@ double('something')
|
|
967
974
|
* Deprecation: deprecated since RSpec 2.14, removed in RSpec 3.0
|
968
975
|
* See also: [myronmarston / why_double.md - Gist](https://gist.github.com/myronmarston/6576665)
|
969
976
|
|
977
|
+
### Pending examples
|
978
|
+
|
979
|
+
**This conversion is available only if your project's RSpec is `>= <%= Transpec::RSpecVersion::RSPEC_2_99 %>` and `< <%= Transpec::RSpecVersion::RSPEC_3_0 %>`.**
|
980
|
+
|
981
|
+
Targets:
|
982
|
+
|
983
|
+
```ruby
|
984
|
+
<%=
|
985
|
+
pending_example_target = <<END
|
986
|
+
describe 'example' do
|
987
|
+
it 'is skipped', :pending => true do
|
988
|
+
do_something_possibly_fail # This won't be run
|
989
|
+
end
|
990
|
+
|
991
|
+
pending 'is skipped' do
|
992
|
+
do_something_possibly_fail # This won't be run
|
993
|
+
end
|
994
|
+
|
995
|
+
it 'is skipped' do
|
996
|
+
pending
|
997
|
+
do_something_possibly_fail # This won't be run
|
998
|
+
end
|
999
|
+
|
1000
|
+
it 'is run and expected to fail' do
|
1001
|
+
pending do
|
1002
|
+
do_something_surely_fail # This will be run and expected to fail
|
1003
|
+
end
|
1004
|
+
end
|
1005
|
+
end
|
1006
|
+
END
|
1007
|
+
-%>
|
1008
|
+
```
|
1009
|
+
|
1010
|
+
Will be converted to:
|
1011
|
+
|
1012
|
+
```ruby
|
1013
|
+
<%=
|
1014
|
+
rspec_version = Transpec::RSpecVersion.skip_available_version
|
1015
|
+
Transpec::Converter.new(nil, rspec_version).convert(pending_example_target)
|
1016
|
+
.gsub('pending', 'pending # #pending with block is no longer supported')
|
1017
|
+
-%>
|
1018
|
+
```
|
1019
|
+
|
1020
|
+
Here's an excerpt from [the warning](https://github.com/rspec/rspec-core/blob/v2.99.0.beta2/lib/rspec/core/example_group.rb#L67-L75) for pending examples in RSpec 2.99:
|
1021
|
+
|
1022
|
+
> The semantics of `RSpec::Core::ExampleGroup#pending` are changing in RSpec 3.
|
1023
|
+
> In RSpec 2.x, it caused the example to be skipped. In RSpec 3, the example will
|
1024
|
+
> still be run but is expected to fail, and will be marked as a failure (rather
|
1025
|
+
> than as pending) if the example passes, just like how `pending` with a block
|
1026
|
+
> from within an example already works.
|
1027
|
+
>
|
1028
|
+
> To keep the same skip semantics, change `pending` to `skip`. Otherwise, if you
|
1029
|
+
> want the new RSpec 3 behavior, you can safely ignore this warning and continue
|
1030
|
+
> to upgrade to RSpec 3 without addressing it.
|
1031
|
+
|
1032
|
+
* This conversion can be disabled by: `--keep pending`
|
1033
|
+
* Deprecation: not deprecated but the behavior changes in RSpec 3.0
|
1034
|
+
* See also: [Feature request: shortcut for pending-block within it · rspec/rspec-core](https://github.com/rspec/rspec-core/issues/1208)
|
1035
|
+
|
970
1036
|
### Current example object
|
971
1037
|
|
972
1038
|
**This conversion is available only if your project's RSpec is `<%= Transpec::RSpecVersion.yielded_example_available_version %>` or later.**
|
@@ -1058,14 +1124,6 @@ Transpec::Converter.new(nil, rspec_version).convert(custom_matcher_dsl_target)
|
|
1058
1124
|
|
1059
1125
|
Tested on MRI 1.9, 2.0, 2.1 and JRuby in 1.9 mode.
|
1060
1126
|
|
1061
|
-
## Contributing
|
1062
|
-
|
1063
|
-
1. Fork it
|
1064
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
1065
|
-
3. Commit your changes (`git commit -am 'Add some feature'`)
|
1066
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
1067
|
-
5. Create new Pull Request
|
1068
|
-
|
1069
1127
|
## License
|
1070
1128
|
|
1071
1129
|
Copyright (c) 2013 Yuji Nakayama
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Transpec
|
4
|
+
module Annotatable
|
5
|
+
attr_reader :message, :source_range
|
6
|
+
|
7
|
+
def initialize(message, source_range)
|
8
|
+
@message = message
|
9
|
+
@source_range = source_range
|
10
|
+
end
|
11
|
+
|
12
|
+
def source_buffer
|
13
|
+
source_range.source_buffer
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/transpec/cli.rb
CHANGED
@@ -27,7 +27,7 @@ module Transpec
|
|
27
27
|
|
28
28
|
def run(args)
|
29
29
|
begin
|
30
|
-
paths = OptionParser.new(
|
30
|
+
paths = OptionParser.new(configuration).parse(args)
|
31
31
|
fail_if_should_not_continue!
|
32
32
|
rescue => error
|
33
33
|
warn error.message
|
@@ -46,9 +46,9 @@ module Transpec
|
|
46
46
|
def process(paths)
|
47
47
|
runtime_data = nil
|
48
48
|
|
49
|
-
unless
|
49
|
+
unless configuration.skip_dynamic_analysis?
|
50
50
|
puts 'Copying the project for dynamic analysis...'
|
51
|
-
DynamicAnalyzer.new(rspec_command:
|
51
|
+
DynamicAnalyzer.new(rspec_command: configuration.rspec_command) do |analyzer|
|
52
52
|
puts "Running dynamic analysis with command #{analyzer.rspec_command.inspect}..."
|
53
53
|
runtime_data = analyzer.analyze(paths)
|
54
54
|
end
|
@@ -63,52 +63,49 @@ module Transpec
|
|
63
63
|
def convert_file(file_path, runtime_data = nil)
|
64
64
|
puts "Converting #{file_path}"
|
65
65
|
|
66
|
-
converter = Converter.new(
|
66
|
+
converter = Converter.new(configuration, project.rspec_version, runtime_data)
|
67
67
|
converter.convert_file!(file_path)
|
68
68
|
|
69
|
-
|
70
|
-
|
71
|
-
converter.context_errors.each do |error|
|
72
|
-
warn_invalid_context_error(error)
|
73
|
-
end
|
69
|
+
warn_annotations(converter.report)
|
70
|
+
report << converter.report
|
74
71
|
rescue Parser::SyntaxError => error
|
75
|
-
|
72
|
+
report.syntax_errors << error
|
76
73
|
warn_syntax_error(error)
|
77
74
|
end
|
78
75
|
|
79
76
|
private
|
80
77
|
|
81
78
|
def fail_if_should_not_continue!
|
82
|
-
unless
|
79
|
+
unless configuration.forced?
|
83
80
|
if Git.command_available? && Git.inside_of_repository? && !Git.clean?
|
84
81
|
fail 'The current Git repository is not clean. Aborting.'
|
85
82
|
end
|
86
83
|
end
|
87
84
|
|
88
|
-
if
|
85
|
+
if project.rspec_version < Transpec.required_rspec_version
|
89
86
|
fail "Your project must have rspec gem dependency #{Transpec.required_rspec_version} " +
|
90
|
-
"or later but currently it's #{
|
87
|
+
"or later but currently it's #{project.rspec_version}. Aborting."
|
91
88
|
end
|
92
89
|
end
|
93
90
|
|
94
91
|
def display_summary
|
95
92
|
puts
|
96
93
|
|
97
|
-
unless
|
94
|
+
unless report.records.empty?
|
98
95
|
puts 'Summary:'
|
99
96
|
puts
|
100
|
-
puts
|
97
|
+
puts report.colored_summary
|
101
98
|
puts
|
102
99
|
end
|
103
100
|
|
104
|
-
puts
|
101
|
+
puts report.colored_stats
|
105
102
|
end
|
106
103
|
|
107
104
|
def generate_commit_message
|
108
|
-
return if
|
105
|
+
return if report.records.empty?
|
109
106
|
return unless Git.command_available? && Git.inside_of_repository?
|
110
107
|
|
111
|
-
commit_message = CommitMessage.new(
|
108
|
+
commit_message = CommitMessage.new(report, project.rspec_version, ARGV)
|
112
109
|
Git.write_commit_message(commit_message.to_s)
|
113
110
|
|
114
111
|
puts
|
@@ -119,7 +116,7 @@ module Transpec
|
|
119
116
|
end
|
120
117
|
|
121
118
|
def display_final_guide
|
122
|
-
return if
|
119
|
+
return if report.records.empty?
|
123
120
|
|
124
121
|
puts
|
125
122
|
puts "Done! Now run #{'rspec'.bright} and check if everything is green."
|
@@ -129,19 +126,30 @@ module Transpec
|
|
129
126
|
warn "Syntax error at #{error.diagnostic.location}. Skipping the file.".color(:red)
|
130
127
|
end
|
131
128
|
|
132
|
-
def
|
133
|
-
|
134
|
-
|
129
|
+
def warn_annotations(report)
|
130
|
+
annotations = report.records.map(&:annotation).compact
|
131
|
+
annotations.concat(report.conversion_errors)
|
132
|
+
annotations.sort_by! { |a| a.source_range.line }
|
133
|
+
|
134
|
+
annotations.each do |annotation|
|
135
|
+
warn_annotation(annotation)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def warn_annotation(annotation)
|
140
|
+
color = annotation.is_a?(Annotation) ? :yellow : :magenta
|
141
|
+
message = annotation.message.color(color) + $RS
|
142
|
+
message << highlighted_source(annotation)
|
135
143
|
warn message
|
136
144
|
end
|
137
145
|
|
138
|
-
def highlighted_source(
|
139
|
-
filename =
|
146
|
+
def highlighted_source(annotation)
|
147
|
+
filename = annotation.source_buffer.name.color(:cyan)
|
140
148
|
|
141
|
-
line_number =
|
149
|
+
line_number = annotation.source_range.line
|
142
150
|
|
143
|
-
source =
|
144
|
-
highlight_range =
|
151
|
+
source = annotation.source_range.source_line
|
152
|
+
highlight_range = annotation.source_range.column_range
|
145
153
|
source[highlight_range] = source[highlight_range].underline
|
146
154
|
|
147
155
|
[filename, line_number, source].join(':')
|