be-let-it-be 0.0.1 → 0.0.2
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/lib/be_let_it_be/analyzer.rb +31 -20
- data/lib/be_let_it_be/cli.rb +0 -2
- data/lib/be_let_it_be/converter.rb +11 -10
- data/lib/be_let_it_be/version.rb +1 -1
- metadata +6 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 15176b1a907a256ee2b544ff198041fdce5d64599f70209d6ec498898b75ad9c
|
4
|
+
data.tar.gz: 2cb16333cfb481c3392716be02a2900e837e6de27b45eff297789daf7b1f3d1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a7407883bc8103b91493f2e8e97f725967419015d6e450583d8663ee1981e26100f22c614c8e5205cbb211f4626689c51d47b3fe384235410f13c8ca82cafd4
|
7
|
+
data.tar.gz: 550a4e4d787185bc322814b18f13deed3c686bfa122e27bd3259936be08a24c37be97d2aaeab8196ad01926d428b9975ce9682f2c32c507c8e507bdbf8e7dbd0
|
@@ -1,47 +1,58 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "
|
3
|
+
require "prism"
|
4
4
|
|
5
5
|
module BeLetItBe
|
6
6
|
class Analyzer
|
7
7
|
def initialize(file)
|
8
|
-
|
8
|
+
file_path = file.respond_to?(:path) ? file.path : file
|
9
|
+
@ast = Prism.parse_file(file_path).value
|
9
10
|
end
|
10
11
|
|
11
12
|
def find_lets
|
12
|
-
traverse(@ast
|
13
|
+
traverse(@ast)
|
13
14
|
end
|
14
15
|
|
15
16
|
private
|
16
17
|
|
17
|
-
def traverse(node
|
18
|
-
|
19
|
-
return lets unless node.is_a?(Parser::AST::Node)
|
18
|
+
def traverse(node)
|
19
|
+
return [] unless node.is_a?(Prism::Node)
|
20
20
|
|
21
21
|
let_info = extract_let_info(node)
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
current_lets = let_info.nil? ? [] : [let_info]
|
23
|
+
|
24
|
+
child_lets = case node
|
25
|
+
when Prism::ProgramNode
|
26
|
+
traverse(node.statements)
|
27
|
+
when Prism::StatementsNode
|
28
|
+
node.body.flat_map { |child| traverse(child) }
|
29
|
+
when Prism::CallNode
|
30
|
+
traverse(node.block)
|
31
|
+
when Prism::BlockNode
|
32
|
+
traverse(node.body)
|
33
|
+
else
|
34
|
+
[]
|
26
35
|
end
|
27
36
|
|
28
|
-
|
37
|
+
current_lets + child_lets
|
29
38
|
end
|
30
39
|
|
31
40
|
def extract_let_info(node)
|
32
|
-
return nil unless node.
|
33
|
-
return nil unless node.
|
41
|
+
return nil unless node.is_a?(Prism::CallNode)
|
42
|
+
return nil unless node.receiver.nil?
|
43
|
+
|
44
|
+
method_name = node.name
|
45
|
+
return nil unless [:let, :let!].include?(method_name)
|
34
46
|
|
35
|
-
|
36
|
-
return nil unless %i[let let!].include?(method_name)
|
47
|
+
return nil unless node.arguments && node.arguments.arguments.length > 0
|
37
48
|
|
38
|
-
|
39
|
-
|
40
|
-
return nil unless args && args.type == :sym
|
49
|
+
first_arg = node.arguments.arguments[0]
|
50
|
+
return nil unless first_arg.is_a?(Prism::SymbolNode)
|
41
51
|
|
42
|
-
|
52
|
+
name = first_arg.value.to_sym
|
53
|
+
line = node.location.start_line
|
43
54
|
|
44
|
-
{type: method_name, name
|
55
|
+
{type: method_name, name:, line:, node:}
|
45
56
|
end
|
46
57
|
end
|
47
58
|
end
|
data/lib/be_let_it_be/cli.rb
CHANGED
@@ -1,22 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "
|
4
|
-
require "unparser"
|
3
|
+
require "prism"
|
5
4
|
require "tempfile"
|
6
5
|
|
7
6
|
module BeLetItBe
|
8
7
|
class Converter
|
9
8
|
def initialize(file)
|
10
|
-
@file = file
|
9
|
+
@file = file.respond_to?(:path) ? file.path : file
|
11
10
|
end
|
12
11
|
|
13
12
|
def try_conversion_single_let(let_info, output_file, exam)
|
14
13
|
source = File.read(@file)
|
15
|
-
buffer = Parser::Source::Buffer.new(@file, source:)
|
16
14
|
|
17
|
-
|
18
|
-
apply_single_conversion(let_info, temp_rewriter)
|
19
|
-
File.write(output_file, temp_rewriter.process)
|
15
|
+
File.write(output_file, apply_single_conversion(let_info, source))
|
20
16
|
|
21
17
|
passed = exam.call
|
22
18
|
unless passed
|
@@ -27,11 +23,16 @@ module BeLetItBe
|
|
27
23
|
|
28
24
|
private
|
29
25
|
|
30
|
-
def apply_single_conversion(let_info,
|
26
|
+
def apply_single_conversion(let_info, source)
|
31
27
|
node = let_info[:node]
|
32
|
-
method_range = node.loc.selector
|
33
28
|
|
34
|
-
|
29
|
+
start_offset = node.message_loc.start_offset
|
30
|
+
end_offset = node.message_loc.end_offset
|
31
|
+
|
32
|
+
new_source = source.dup
|
33
|
+
new_source[start_offset...end_offset] = "let_it_be"
|
34
|
+
|
35
|
+
new_source
|
35
36
|
end
|
36
37
|
end
|
37
38
|
end
|
data/lib/be_let_it_be/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: be-let-it-be
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- moznion
|
@@ -10,33 +10,19 @@ cert_chain: []
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
|
-
name:
|
13
|
+
name: prism
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
16
|
- - "~>"
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: '
|
18
|
+
version: '1.4'
|
19
19
|
type: :runtime
|
20
20
|
prerelease: false
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
22
22
|
requirements:
|
23
23
|
- - "~>"
|
24
24
|
- !ruby/object:Gem::Version
|
25
|
-
version: '
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: unparser
|
28
|
-
requirement: !ruby/object:Gem::Requirement
|
29
|
-
requirements:
|
30
|
-
- - "~>"
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: '0.7'
|
33
|
-
type: :runtime
|
34
|
-
prerelease: false
|
35
|
-
version_requirements: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - "~>"
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '0.7'
|
25
|
+
version: '1.4'
|
40
26
|
- !ruby/object:Gem::Dependency
|
41
27
|
name: thor
|
42
28
|
requirement: !ruby/object:Gem::Requirement
|
@@ -51,8 +37,8 @@ dependencies:
|
|
51
37
|
- - "~>"
|
52
38
|
- !ruby/object:Gem::Version
|
53
39
|
version: '1.3'
|
54
|
-
description: A command-line tool that
|
55
|
-
let_it_be where
|
40
|
+
description: A command-line tool that automatically converts RSpec's `let` and `let!`
|
41
|
+
declarations to `let_it_be` where it's safe to do so.
|
56
42
|
email:
|
57
43
|
- moznion@mail.moznion.net
|
58
44
|
executables:
|