sirop 0.1
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 +7 -0
- data/CHANGELOG.md +3 -0
- data/README.md +4 -0
- data/lib/sirop/block_finder.rb +42 -0
- data/lib/sirop/version.rb +4 -0
- data/lib/sirop.rb +27 -0
- metadata +84 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: edde04771185a121f37a4a2df66569803c6f5b18d2a6739923c2a58cedacfc24
|
4
|
+
data.tar.gz: 364af589b7a6ca122f32447c23dc281b296e6ade1b9f280dca3e6e51b50d456b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6bb9fc18cefdbe071ba2b1d7f54fd0aa8111f97ffde49c362b4314e92d300e33075711a956384c15ee7880dab8bc85524d63de3ef5625278aa35917fce983066
|
7
|
+
data.tar.gz: e35e58fc9ba7d223d68298a3a25c8cb30596a1f548e314298de10730b6ea49456486fff541bee1cca5df3f3b092cd59e98fe3e9634a92be75f1d5b4bf5532c6e
|
data/CHANGELOG.md
ADDED
data/README.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sirop
|
4
|
+
class BlockFinder < Prism::BasicVisitor
|
5
|
+
attr_accessor :block_node
|
6
|
+
|
7
|
+
def initialize(proc, lineno)
|
8
|
+
@proc = proc
|
9
|
+
@lineno = lineno
|
10
|
+
end
|
11
|
+
|
12
|
+
def find(program)
|
13
|
+
# p program
|
14
|
+
# puts
|
15
|
+
catch(@proc) {
|
16
|
+
visit(program)
|
17
|
+
nil
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def visit_lambda_node(node)
|
22
|
+
if node.location.start_line == @lineno
|
23
|
+
throw @proc, node
|
24
|
+
else
|
25
|
+
visit_child_nodes(node)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def visit_call_node(node)
|
30
|
+
case node.name
|
31
|
+
when :proc, :lambda
|
32
|
+
if node.block && node.block.location.start_line == @lineno
|
33
|
+
throw @proc, node
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def method_missing(sym, node, *args)
|
39
|
+
visit_child_nodes(node)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/sirop.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'prism'
|
4
|
+
require 'sirop/block_finder'
|
5
|
+
|
6
|
+
module Sirop
|
7
|
+
class << self
|
8
|
+
def find(obj)
|
9
|
+
case obj
|
10
|
+
when Proc
|
11
|
+
find_proc(obj)
|
12
|
+
else
|
13
|
+
raise ArgumentError, "Invalid object type"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def find_proc(proc)
|
18
|
+
fn, lineno = proc.source_location
|
19
|
+
pr = Prism.parse(IO.read(fn), filepath: fn)
|
20
|
+
program = pr.value
|
21
|
+
|
22
|
+
finder = Sirop::BlockFinder.new(proc, lineno)
|
23
|
+
finder.find(program)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sirop
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sharon Rosner
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-02-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: prism
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.19.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.19.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: minitest
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 5.22.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 5.22.0
|
41
|
+
description:
|
42
|
+
email: sharon@noteflakes.com
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files:
|
46
|
+
- README.md
|
47
|
+
files:
|
48
|
+
- CHANGELOG.md
|
49
|
+
- README.md
|
50
|
+
- lib/sirop.rb
|
51
|
+
- lib/sirop/block_finder.rb
|
52
|
+
- lib/sirop/version.rb
|
53
|
+
homepage: http://github.com/digital-fabric/sirop
|
54
|
+
licenses:
|
55
|
+
- MIT
|
56
|
+
metadata:
|
57
|
+
source_code_uri: https://github.com/digital-fabric/sirop
|
58
|
+
documentation_uri: https://www.rubydoc.info/gems/sirop
|
59
|
+
homepage_uri: https://github.com/digital-fabric/sirop
|
60
|
+
changelog_uri: https://github.com/digital-fabric/sirop/blob/main/CHANGELOG.md
|
61
|
+
post_install_message:
|
62
|
+
rdoc_options:
|
63
|
+
- "--title"
|
64
|
+
- Sirop
|
65
|
+
- "--main"
|
66
|
+
- README.md
|
67
|
+
require_paths:
|
68
|
+
- lib
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '3.0'
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
requirements: []
|
80
|
+
rubygems_version: 3.5.3
|
81
|
+
signing_key:
|
82
|
+
specification_version: 4
|
83
|
+
summary: 'Sirop: Ruby code rewriter'
|
84
|
+
test_files: []
|