rbs-inline 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rbs/inline/ast/declarations.rb +2 -12
- data/lib/rbs/inline/cli.rb +17 -4
- data/lib/rbs/inline/parser.rb +13 -7
- data/lib/rbs/inline/version.rb +1 -1
- data/rbs_collection.lock.yaml +2 -2
- data/sig/generated/rbs/inline/parser.rbs +3 -2
- metadata +12 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44afba2006b4ffed3719716d5ac515d474dc7ba9ee18c4f9b3298c9925441284
|
4
|
+
data.tar.gz: 2c008cd99c1de1a2cb80945eed727b74fe9450af07fd3d20299775d5ee728978
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7d02d3e07d295c00890ac95bad4c2f7f49700a0cdddb9885dcc3c194d272ef5b387c168f675a46f2b5dc3f49aaeb5230603dbe7ebcea20087952aebb7516b66
|
7
|
+
data.tar.gz: 6e476d54d6db64e42cdc7a6bfe9dfb5b1454f290e2746836cc17fe77ca41db5dac2b1a01d311877af189ee7ad2bd06207f1db2aaac86e1e494dd5855e921254d
|
@@ -9,18 +9,8 @@ module RBS
|
|
9
9
|
# @rbs returns TypeName?
|
10
10
|
def type_name(node)
|
11
11
|
case node
|
12
|
-
when Prism::ConstantReadNode
|
13
|
-
TypeName(node.
|
14
|
-
when Prism::ConstantPathNode
|
15
|
-
if node.parent
|
16
|
-
if parent = type_name(node.parent)
|
17
|
-
if child = type_name(node.child)
|
18
|
-
return parent + child
|
19
|
-
end
|
20
|
-
end
|
21
|
-
else
|
22
|
-
type_name(node.child)&.absolute!
|
23
|
-
end
|
12
|
+
when Prism::ConstantReadNode, Prism::ConstantPathNode
|
13
|
+
TypeName(node.full_name)
|
24
14
|
end
|
25
15
|
end
|
26
16
|
end
|
data/lib/rbs/inline/cli.rb
CHANGED
@@ -72,15 +72,28 @@ module RBS
|
|
72
72
|
def run(args)
|
73
73
|
base_paths = [Pathname("lib"), Pathname("app")]
|
74
74
|
output_path = nil #: Pathname?
|
75
|
+
opt_in = true
|
75
76
|
|
76
77
|
OptionParser.new do |opts|
|
77
|
-
opts.on("--base=
|
78
|
+
opts.on("--base=BASE", "The path to calculate relative path of files (defaults to #{base_paths.join(File::PATH_SEPARATOR)})") do |str|
|
78
79
|
# @type var str: String
|
79
80
|
base_paths = str.split(File::PATH_SEPARATOR).map {|path| Pathname(path) }
|
80
81
|
end
|
81
82
|
|
82
|
-
opts.on("--output=
|
83
|
-
|
83
|
+
opts.on("--output[=DEST]", "Save the generated RBS files under `sig/generated` or DEST if specified (defaults to output to STDOUT)") do
|
84
|
+
if _1
|
85
|
+
output_path = Pathname(_1)
|
86
|
+
else
|
87
|
+
output_path = Pathname("sig/generated")
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
opts.on("--opt-out", "Generates RBS files by default. Opt-out with `# rbs_inline: disabled` comment") do
|
92
|
+
opt_in = false
|
93
|
+
end
|
94
|
+
|
95
|
+
opts.on("--opt-in", "Generates RBS files only for files with `# rbs_inline: enabled` comment (default)") do
|
96
|
+
opt_in = true
|
84
97
|
end
|
85
98
|
|
86
99
|
opts.on("--verbose") do
|
@@ -126,7 +139,7 @@ module RBS
|
|
126
139
|
|
127
140
|
logger.debug { "Parsing ruby file #{target}..." }
|
128
141
|
|
129
|
-
if (uses, decls = Parser.parse(Prism.parse_file(target.to_s)))
|
142
|
+
if (uses, decls = Parser.parse(Prism.parse_file(target.to_s), opt_in: opt_in))
|
130
143
|
writer = Writer.new()
|
131
144
|
writer.header("Generated from #{target.relative? ? target : target.relative_path_from(Pathname.pwd)} with RBS::Inline")
|
132
145
|
writer.write(uses, decls)
|
data/lib/rbs/inline/parser.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# rbs_inline: enabled
|
2
|
+
|
1
3
|
# @rbs use Prism::*
|
2
4
|
|
3
5
|
module RBS
|
@@ -36,22 +38,26 @@ module RBS
|
|
36
38
|
@comments = {}
|
37
39
|
end
|
38
40
|
|
39
|
-
# @rbs result: ParseResult
|
41
|
+
# @rbs result: ParseResult
|
42
|
+
# @rbs opt_in: bool -- `true` for *opt-out* mode, `false` for *opt-in* mode.
|
40
43
|
# @rbs returns [Array[AST::Annotations::Use], Array[AST::Declarations::t]]?
|
41
|
-
def self.parse(result)
|
44
|
+
def self.parse(result, opt_in:)
|
42
45
|
instance = Parser.new()
|
43
46
|
|
44
|
-
# pp result
|
45
|
-
|
46
47
|
annots = AnnotationParser.parse(result.comments)
|
47
48
|
annots.each do |result|
|
48
49
|
instance.comments[result.line_range.end] = result
|
49
50
|
end
|
50
51
|
|
51
|
-
|
52
|
-
|
52
|
+
with_enable_magic_comment = result.comments.any? {|comment| comment.location.slice =~ /\A# rbs_inline: enabled\Z/}
|
53
|
+
with_disable_magic_comment = result.comments.any? {|comment| comment.location.slice =~ /\A# rbs_inline: disabled\Z/}
|
53
54
|
|
54
|
-
return
|
55
|
+
return if with_disable_magic_comment # Skips if `rbs_inline: disabled`
|
56
|
+
|
57
|
+
if opt_in
|
58
|
+
# opt-in means the `rbs_inline: enable` is required.
|
59
|
+
return unless with_enable_magic_comment
|
60
|
+
end
|
55
61
|
|
56
62
|
uses = [] #: Array[AST::Annotations::Use]
|
57
63
|
annots.each do |annot|
|
data/lib/rbs/inline/version.rb
CHANGED
data/rbs_collection.lock.yaml
CHANGED
@@ -38,7 +38,7 @@ gems:
|
|
38
38
|
source:
|
39
39
|
type: stdlib
|
40
40
|
- name: prism
|
41
|
-
version: 0.
|
41
|
+
version: 0.29.0
|
42
42
|
source:
|
43
43
|
type: rubygems
|
44
44
|
- name: rake
|
@@ -46,7 +46,7 @@ gems:
|
|
46
46
|
source:
|
47
47
|
type: git
|
48
48
|
name: ruby/gem_rbs_collection
|
49
|
-
revision:
|
49
|
+
revision: 7a105f52053ce1c708b605dfa9c1ab8473424036
|
50
50
|
remote: https://github.com/ruby/gem_rbs_collection.git
|
51
51
|
repo_dir: gems
|
52
52
|
- name: rbs
|
@@ -30,9 +30,10 @@ module RBS
|
|
30
30
|
|
31
31
|
def initialize: () -> void
|
32
32
|
|
33
|
-
# @rbs result: ParseResult
|
33
|
+
# @rbs result: ParseResult
|
34
|
+
# @rbs opt_in: bool -- `true` for *opt-out* mode, `false` for *opt-in* mode.
|
34
35
|
# @rbs returns [Array[AST::Annotations::Use], Array[AST::Declarations::t]]?
|
35
|
-
def self.parse: (ParseResult
|
36
|
+
def self.parse: (ParseResult result, opt_in: bool) -> [ Array[AST::Annotations::Use], Array[AST::Declarations::t] ]?
|
36
37
|
|
37
38
|
# @rbs returns AST::Declarations::ModuleDecl | AST::Declarations::ClassDecl | nil
|
38
39
|
def current_class_module_decl: () -> (AST::Declarations::ModuleDecl | AST::Declarations::ClassDecl | nil)
|
metadata
CHANGED
@@ -1,29 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbs-inline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Soutaro Matsumoto
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-05-
|
11
|
+
date: 2024-05-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: prism
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.29'
|
20
|
+
- - "<"
|
18
21
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
22
|
+
version: '0.30'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.29'
|
30
|
+
- - "<"
|
25
31
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
32
|
+
version: '0.30'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: rbs
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|