bashcov 3.2.0 → 3.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7fa991330e449d30bbbb4ee7fa85903164e34ece8eeff6a656434a6bb87b4e04
4
- data.tar.gz: 8acfbe356138dd648b9d85fb3d3344b8c7e55c65a6b9e8cc9a22f4ff5e15a50b
3
+ metadata.gz: cfda1fc3d4c19c0782e856c20e9435b91e16487221fb97e2875b32a5cb73f653
4
+ data.tar.gz: a226b0ec693237618d3a50c3454a23168aff12ed7aefd79a85a796201b059729
5
5
  SHA512:
6
- metadata.gz: d553f6724297e945a69a75f78723b2b2733843999d4dc7e485593b4d368a77fe81e647254e6bc37e9fa4e80fe2f99270a8267b90c5b6cd98b41de60863284420
7
- data.tar.gz: f3263ac5329d63c30c3b56deddd53f4f6c9a69d8cd9bf4dd350ae10fe8497dc88fe0670b41a9ee21d2bb73acafb0c50fd39edcdd768d3be3e601298266491430
6
+ metadata.gz: b44520af7881af5f84965c74cb673451536edefb64556bde376e13597173e1126ff6873aad360d484aa8886262bd5ad8915588a299819b891b02331d9d4ae784
7
+ data.tar.gz: df3e60d5fbfa4476b51265ae84314a41b28a592062cefa62bda00a20b3d336bc1ba66994c14092b9d24e175aed2be54643e966c97ad33844b6f3726ff1019d42
data/.rubocop.yml CHANGED
@@ -3,7 +3,7 @@ plugins:
3
3
  - rubocop-rspec
4
4
 
5
5
  AllCops:
6
- TargetRubyVersion: 3.0
6
+ TargetRubyVersion: 3.2
7
7
  NewCops: enable
8
8
  # Ignore files ignored by Git. Improved version of the template shown here:
9
9
  # https://docs.rubocop.org/rubocop/configuration.html#pre-processing
data/CHANGELOG.md CHANGED
@@ -1,7 +1,22 @@
1
- ## Unreleased ([changes](https://github.com/infertux/bashcov/compare/v3.2.0...master))
1
+ ## Unreleased ([changes](https://github.com/infertux/bashcov/compare/v3.3.0...master))
2
2
 
3
3
  * TBD
4
4
 
5
+ ## v3.3.0, 2026-02-18 ([changes](https://github.com/infertux/bashcov/compare/v3.2.0...v3.3.0))
6
+
7
+ * [MISC] Add workflow to build Gem
8
+ * [BUGFIX] Fix heredoc with space not reported as covered (fixes #102)
9
+ * [BUGFIX] Do not write to stdout in specs
10
+ * [MISC] Update dependencies for Nix
11
+ * [BUXFIX] Add missing test dependencies for Ruby 4.0
12
+ * [MISC] Bump minimal Ruby version to 3.2
13
+ * [MISC] Test with Debian 12
14
+ * [MISC] Test against all Bash versions
15
+ * [MISC] Run GitHub CI monthly
16
+ * [BUGFIX] Fix Rubocop violations
17
+ * [FEATURE] Support multiline subshells
18
+ * [FEATURE] Support function names containing the at sign
19
+
5
20
  ## v3.2.0, 2025-07-28 ([changes](https://github.com/infertux/bashcov/compare/v3.1.3...v3.2.0))
6
21
 
7
22
  * [BUGFIX] Support function names containing dots (#97)
data/Gemfile.nix.lock CHANGED
@@ -7,77 +7,98 @@ PATH
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- aruba (2.3.1)
11
- bundler (>= 1.17, < 3.0)
10
+ aruba (2.3.3)
11
+ bundler (>= 1.17)
12
12
  contracts (>= 0.16.0, < 0.18.0)
13
13
  cucumber (>= 8.0, < 11.0)
14
- rspec-expectations (~> 3.4)
14
+ rspec-expectations (>= 3.4, < 5.0)
15
15
  thor (~> 1.0)
16
16
  ast (2.4.3)
17
17
  base64 (0.3.0)
18
- bigdecimal (3.2.2)
18
+ benchmark (0.5.0)
19
+ bigdecimal (4.0.1)
19
20
  builder (3.3.0)
20
- bundler-audit (0.9.2)
21
- bundler (>= 1.2.0, < 3)
21
+ bundler-audit (0.9.3)
22
+ bundler (>= 1.2.0)
22
23
  thor (~> 1.0)
23
- contracts (0.17.2)
24
- cucumber (10.0.0)
24
+ contracts (0.17.3)
25
+ cucumber (10.2.0)
25
26
  base64 (~> 0.2)
26
27
  builder (~> 3.2)
27
- cucumber-ci-environment (> 9, < 11)
28
+ cucumber-ci-environment (> 9, < 12)
28
29
  cucumber-core (> 15, < 17)
29
- cucumber-cucumber-expressions (> 17, < 19)
30
- cucumber-html-formatter (> 20.3, < 22)
30
+ cucumber-cucumber-expressions (> 17, < 20)
31
+ cucumber-html-formatter (> 21, < 23)
31
32
  diff-lcs (~> 1.5)
32
33
  logger (~> 1.6)
33
34
  mini_mime (~> 1.1)
34
35
  multi_test (~> 1.1)
35
36
  sys-uname (~> 1.3)
36
- cucumber-ci-environment (10.0.1)
37
- cucumber-core (15.1.0)
38
- cucumber-gherkin (> 27, < 31)
39
- cucumber-messages (> 26, < 29)
40
- cucumber-tag-expressions (> 5, < 7)
37
+ cucumber-ci-environment (11.0.0)
38
+ cucumber-core (16.1.1)
39
+ cucumber-gherkin (> 36, < 40)
40
+ cucumber-messages (> 31, < 33)
41
+ cucumber-tag-expressions (> 6, < 9)
41
42
  cucumber-cucumber-expressions (18.0.1)
42
43
  bigdecimal
43
- cucumber-gherkin (30.0.4)
44
- cucumber-messages (> 25, < 28)
45
- cucumber-html-formatter (21.13.0)
46
- cucumber-messages (> 19, < 28)
47
- cucumber-messages (27.2.0)
48
- cucumber-tag-expressions (6.1.2)
44
+ cucumber-gherkin (37.0.1)
45
+ cucumber-messages (>= 31, < 32)
46
+ cucumber-html-formatter (22.3.0)
47
+ cucumber-messages (> 23, < 33)
48
+ cucumber-messages (31.1.0)
49
+ cucumber-tag-expressions (8.1.0)
50
+ date (3.5.1)
49
51
  diff-lcs (1.6.2)
50
52
  docile (1.4.1)
53
+ erb (6.0.1)
51
54
  ffi (1.16.3)
52
- json (2.13.1)
55
+ io-console (0.8.2)
56
+ irb (1.16.0)
57
+ pp (>= 0.6.0)
58
+ rdoc (>= 4.0.0)
59
+ reline (>= 0.4.2)
60
+ json (2.18.0)
53
61
  language_server-protocol (3.17.0.5)
54
62
  lint_roller (1.1.0)
55
63
  logger (1.7.0)
64
+ memoist3 (1.0.0)
56
65
  mini_mime (1.1.5)
57
66
  multi_test (1.1.0)
58
67
  parallel (1.27.0)
59
- parser (3.3.9.0)
68
+ parser (3.3.10.0)
60
69
  ast (~> 2.4.1)
61
70
  racc
62
- prism (1.4.0)
71
+ pp (0.6.3)
72
+ prettyprint
73
+ prettyprint (0.2.0)
74
+ prism (1.7.0)
75
+ psych (5.3.1)
76
+ date
77
+ stringio
63
78
  racc (1.8.1)
64
79
  rainbow (3.1.1)
65
- rake (13.3.0)
66
- regexp_parser (2.10.0)
67
- rspec (3.13.1)
80
+ rake (13.3.1)
81
+ rdoc (7.0.3)
82
+ erb
83
+ psych (>= 4.0.0)
84
+ tsort
85
+ regexp_parser (2.11.3)
86
+ reline (0.6.3)
87
+ io-console (~> 0.5)
88
+ rspec (3.13.2)
68
89
  rspec-core (~> 3.13.0)
69
90
  rspec-expectations (~> 3.13.0)
70
91
  rspec-mocks (~> 3.13.0)
71
- rspec-core (3.13.5)
92
+ rspec-core (3.13.6)
72
93
  rspec-support (~> 3.13.0)
73
94
  rspec-expectations (3.13.5)
74
95
  diff-lcs (>= 1.2.0, < 2.0)
75
96
  rspec-support (~> 3.13.0)
76
- rspec-mocks (3.13.5)
97
+ rspec-mocks (3.13.7)
77
98
  diff-lcs (>= 1.2.0, < 2.0)
78
99
  rspec-support (~> 3.13.0)
79
- rspec-support (3.13.4)
80
- rubocop (1.79.0)
100
+ rspec-support (3.13.6)
101
+ rubocop (1.82.1)
81
102
  json (~> 2.3)
82
103
  language_server-protocol (~> 3.17.0.2)
83
104
  lint_roller (~> 1.1.0)
@@ -85,19 +106,18 @@ GEM
85
106
  parser (>= 3.3.0.2)
86
107
  rainbow (>= 2.2.2, < 4.0)
87
108
  regexp_parser (>= 2.9.3, < 3.0)
88
- rubocop-ast (>= 1.46.0, < 2.0)
109
+ rubocop-ast (>= 1.48.0, < 2.0)
89
110
  ruby-progressbar (~> 1.7)
90
- tsort (>= 0.2.0)
91
111
  unicode-display_width (>= 2.4.0, < 4.0)
92
- rubocop-ast (1.46.0)
112
+ rubocop-ast (1.49.0)
93
113
  parser (>= 3.3.7.2)
94
- prism (~> 1.4)
114
+ prism (~> 1.7)
95
115
  rubocop-rake (0.7.1)
96
116
  lint_roller (~> 1.1)
97
117
  rubocop (>= 1.72.1)
98
- rubocop-rspec (3.6.0)
118
+ rubocop-rspec (3.8.0)
99
119
  lint_roller (~> 1.1)
100
- rubocop (~> 1.72, >= 1.72.1)
120
+ rubocop (~> 1.81)
101
121
  ruby-progressbar (1.13.0)
102
122
  simplecov (0.22.0)
103
123
  docile (~> 1.1)
@@ -105,14 +125,16 @@ GEM
105
125
  simplecov_json_formatter (~> 0.1)
106
126
  simplecov-html (0.13.2)
107
127
  simplecov_json_formatter (0.1.4)
108
- sys-uname (1.3.1)
128
+ stringio (3.2.0)
129
+ sys-uname (1.4.1)
109
130
  ffi (~> 1.1)
131
+ memoist3 (~> 1.0.0)
110
132
  thor (1.4.0)
111
133
  tsort (0.2.0)
112
- unicode-display_width (3.1.4)
113
- unicode-emoji (~> 4.0, >= 4.0.4)
114
- unicode-emoji (4.0.4)
115
- yard (0.9.37)
134
+ unicode-display_width (3.2.0)
135
+ unicode-emoji (~> 4.1)
136
+ unicode-emoji (4.2.0)
137
+ yard (0.9.38)
116
138
 
117
139
  PLATFORMS
118
140
  aarch64-linux-gnu
@@ -130,10 +152,13 @@ PLATFORMS
130
152
  DEPENDENCIES
131
153
  aruba
132
154
  bashcov!
155
+ benchmark
133
156
  bundler-audit
134
157
  cucumber
135
158
  ffi (~> 1.16.0)
159
+ irb
136
160
  rake
161
+ rdoc
137
162
  rspec
138
163
  rubocop
139
164
  rubocop-rake
data/Guardfile CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # More info at https://github.com/guard/guard#readme
4
4
 
5
- guard "rspec", cli: "--tag ~slow" do
5
+ guard "rspec" do
6
6
  watch(%r{^spec/.+_spec\.rb$})
7
7
  watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
8
8
  watch(%r{^lib/(.+)/(.+)\.rb$}) { |m| "spec/#{m[1]}/#{m[2]}_spec.rb" }
data/gemset.nix CHANGED
@@ -5,10 +5,10 @@
5
5
  platforms = [];
6
6
  source = {
7
7
  remotes = ["https://rubygems.org"];
8
- sha256 = "1gdz1yqgs9dm14x1lg4spzc5mrg51s0jybj4g2wp46wlb2k70k5h";
8
+ sha256 = "1m7ijdx5zz5mizymmwxkydyszfcafgljgqlvmlw5m9v86c12yyl3";
9
9
  type = "gem";
10
10
  };
11
- version = "2.3.1";
11
+ version = "2.3.3";
12
12
  };
13
13
  ast = {
14
14
  groups = ["default" "development"];
@@ -40,15 +40,25 @@
40
40
  };
41
41
  version = "3.2.0";
42
42
  };
43
+ benchmark = {
44
+ groups = ["development"];
45
+ platforms = [];
46
+ source = {
47
+ remotes = ["https://rubygems.org"];
48
+ sha256 = "0v1337j39w1z7x9zs4q7ag0nfv4vs4xlsjx2la0wpv8s6hig2pa6";
49
+ type = "gem";
50
+ };
51
+ version = "0.5.0";
52
+ };
43
53
  bigdecimal = {
44
54
  groups = ["default" "development"];
45
55
  platforms = [];
46
56
  source = {
47
57
  remotes = ["https://rubygems.org"];
48
- sha256 = "1p2szbr4jdvmwaaj2kxlbv1rp0m6ycbgfyp0kjkkkswmniv5y21r";
58
+ sha256 = "19y406nx17arzsbc515mjmr6k5p59afprspa1k423yd9cp8d61wb";
49
59
  type = "gem";
50
60
  };
51
- version = "3.2.2";
61
+ version = "4.0.1";
52
62
  };
53
63
  builder = {
54
64
  groups = ["default" "development"];
@@ -66,20 +76,20 @@
66
76
  platforms = [];
67
77
  source = {
68
78
  remotes = ["https://rubygems.org"];
69
- sha256 = "0j0h5cgnzk0ms17ssjkzfzwz65ggrs3lsp53a1j46p4616m1s1bk";
79
+ sha256 = "1sdlr4rj7x5nbrl8zkd3dqdg4fc50bnpx37rl0l0szg4f5n7dj41";
70
80
  type = "gem";
71
81
  };
72
- version = "0.9.2";
82
+ version = "0.9.3";
73
83
  };
74
84
  contracts = {
75
85
  groups = ["default" "development"];
76
86
  platforms = [];
77
87
  source = {
78
88
  remotes = ["https://rubygems.org"];
79
- sha256 = "1sclvlwnlxfaj1595xd0rn3x3w0ljic3vqgnx6476lr7x8xbpbiv";
89
+ sha256 = "1mqlhfsf53r5r5assnwzqq1ajbhwxcxniddpxjdhjiza2dj64bp7";
80
90
  type = "gem";
81
91
  };
82
- version = "0.17.2";
92
+ version = "0.17.3";
83
93
  };
84
94
  cucumber = {
85
95
  dependencies = ["base64" "builder" "cucumber-ci-environment" "cucumber-core" "cucumber-cucumber-expressions" "cucumber-html-formatter" "diff-lcs" "logger" "mini_mime" "multi_test" "sys-uname"];
@@ -87,20 +97,20 @@
87
97
  platforms = [];
88
98
  source = {
89
99
  remotes = ["https://rubygems.org"];
90
- sha256 = "1g9gk07vn3dmwfzg84hqn1kj1qz2q6sxd2pbyq9p93mxwxc0397c";
100
+ sha256 = "0n41b80fg8bz49m9rhms1g1zai2wl4m3z1841yv5h27lxhqvvvgx";
91
101
  type = "gem";
92
102
  };
93
- version = "10.0.0";
103
+ version = "10.2.0";
94
104
  };
95
105
  cucumber-ci-environment = {
96
106
  groups = ["default" "development"];
97
107
  platforms = [];
98
108
  source = {
99
109
  remotes = ["https://rubygems.org"];
100
- sha256 = "0cc6w7dqlmnp59ymi7pyspm3w4m7fn37x6b18pziv62wr373yvmv";
110
+ sha256 = "1qnif57qqcvaz361jkbg43pnzn80jac0ys7gklymn08b3ng9mxqd";
101
111
  type = "gem";
102
112
  };
103
- version = "10.0.1";
113
+ version = "11.0.0";
104
114
  };
105
115
  cucumber-core = {
106
116
  dependencies = ["cucumber-gherkin" "cucumber-messages" "cucumber-tag-expressions"];
@@ -108,10 +118,10 @@
108
118
  platforms = [];
109
119
  source = {
110
120
  remotes = ["https://rubygems.org"];
111
- sha256 = "1drl84y0nzwms4sgx2z1l5wgsmfmi299c4kycic3lrjzbm15cp1d";
121
+ sha256 = "12bbwa5fzi08jspvk4wr17wmlrwz2abg87m2y5imz1p23q5aiank";
112
122
  type = "gem";
113
123
  };
114
- version = "15.1.0";
124
+ version = "16.1.1";
115
125
  };
116
126
  cucumber-cucumber-expressions = {
117
127
  dependencies = ["bigdecimal"];
@@ -130,10 +140,10 @@
130
140
  platforms = [];
131
141
  source = {
132
142
  remotes = ["https://rubygems.org"];
133
- sha256 = "044ccaj3c3zv07g823dk4i1v2hbjkfwpp67k90bs8hlyy4pkyyzy";
143
+ sha256 = "1nankcfqfj3l4d3hkh4476fywjygjjk04n78jxzxnv59vjh7nhq6";
134
144
  type = "gem";
135
145
  };
136
- version = "30.0.4";
146
+ version = "37.0.1";
137
147
  };
138
148
  cucumber-html-formatter = {
139
149
  dependencies = ["cucumber-messages"];
@@ -141,30 +151,40 @@
141
151
  platforms = [];
142
152
  source = {
143
153
  remotes = ["https://rubygems.org"];
144
- sha256 = "0kgfhzjylhzm6xqj5b3b12888wwnrcvwig0j84ldchl6vavj0bl8";
154
+ sha256 = "0a873ll5305g8gbp4sbf4006pn4bck6c491qbwxdgnw8ap88wxpr";
145
155
  type = "gem";
146
156
  };
147
- version = "21.13.0";
157
+ version = "22.3.0";
148
158
  };
149
159
  cucumber-messages = {
150
160
  groups = ["default" "development"];
151
161
  platforms = [];
152
162
  source = {
153
163
  remotes = ["https://rubygems.org"];
154
- sha256 = "1zwzjwr270j11fpg5m1abvdvyiydjsd0p6dd2443vnr08r2s3qj6";
164
+ sha256 = "02jscha3irpflhl5aanjxgj6cqx198pl89zd162sdsc90f449r4i";
155
165
  type = "gem";
156
166
  };
157
- version = "27.2.0";
167
+ version = "31.1.0";
158
168
  };
159
169
  cucumber-tag-expressions = {
160
170
  groups = ["default" "development"];
161
171
  platforms = [];
162
172
  source = {
163
173
  remotes = ["https://rubygems.org"];
164
- sha256 = "0vcifp1fiha6yqi36m26n1vr8sz3dpnn5966hcz4a3dq43lf947p";
174
+ sha256 = "089fynlhyzcjng7x8ffda1gafdi1yfv2k4y9m7r5p3jgcnvc9n4v";
165
175
  type = "gem";
166
176
  };
167
- version = "6.1.2";
177
+ version = "8.1.0";
178
+ };
179
+ date = {
180
+ groups = ["default" "development"];
181
+ platforms = [];
182
+ source = {
183
+ remotes = ["https://rubygems.org"];
184
+ sha256 = "1h0db8r2v5llxdbzkzyllkfniqw9gm092qn7cbaib73v9lw0c3bm";
185
+ type = "gem";
186
+ };
187
+ version = "3.5.1";
168
188
  };
169
189
  diff-lcs = {
170
190
  groups = ["default" "development"];
@@ -186,6 +206,16 @@
186
206
  };
187
207
  version = "1.4.1";
188
208
  };
209
+ erb = {
210
+ groups = ["default" "development"];
211
+ platforms = [];
212
+ source = {
213
+ remotes = ["https://rubygems.org"];
214
+ sha256 = "1rcpq49pyaiclpjp3c3qjl25r95hqvin2q2dczaynaj7qncxvv18";
215
+ type = "gem";
216
+ };
217
+ version = "6.0.1";
218
+ };
189
219
  ffi = {
190
220
  groups = ["development"];
191
221
  platforms = [];
@@ -196,15 +226,36 @@
196
226
  };
197
227
  version = "1.16.3";
198
228
  };
229
+ io-console = {
230
+ groups = ["default" "development"];
231
+ platforms = [];
232
+ source = {
233
+ remotes = ["https://rubygems.org"];
234
+ sha256 = "1k0lk3pwadm2myvpg893n8jshmrf2sigrd4ki15lymy7gixaxqyn";
235
+ type = "gem";
236
+ };
237
+ version = "0.8.2";
238
+ };
239
+ irb = {
240
+ dependencies = ["pp" "rdoc" "reline"];
241
+ groups = ["development"];
242
+ platforms = [];
243
+ source = {
244
+ remotes = ["https://rubygems.org"];
245
+ sha256 = "01h8bdksg0cr8bw5dhlhr29ix33rp822jmshy6rdqz4lmk4mdgia";
246
+ type = "gem";
247
+ };
248
+ version = "1.16.0";
249
+ };
199
250
  json = {
200
251
  groups = ["default" "development"];
201
252
  platforms = [];
202
253
  source = {
203
254
  remotes = ["https://rubygems.org"];
204
- sha256 = "1z0gmgndcqrcp5hgmgfrf8qiq9c6g4ccfs98qrgsr2d78jxz8z4f";
255
+ sha256 = "01fmiz052cvnxgdnhb3qwcy88xbv7l3liz0fkvs5qgqqwjp0c1di";
205
256
  type = "gem";
206
257
  };
207
- version = "2.13.1";
258
+ version = "2.18.0";
208
259
  };
209
260
  language_server-protocol = {
210
261
  groups = ["default" "development"];
@@ -236,6 +287,16 @@
236
287
  };
237
288
  version = "1.7.0";
238
289
  };
290
+ memoist3 = {
291
+ groups = ["default" "development"];
292
+ platforms = [];
293
+ source = {
294
+ remotes = ["https://rubygems.org"];
295
+ sha256 = "0vyma0mpjibqigzl6j9lij7zh3kvqlyi88qc0mia6l7i5i044vk8";
296
+ type = "gem";
297
+ };
298
+ version = "1.0.0";
299
+ };
239
300
  mini_mime = {
240
301
  groups = ["default" "development"];
241
302
  platforms = [];
@@ -272,20 +333,52 @@
272
333
  platforms = [];
273
334
  source = {
274
335
  remotes = ["https://rubygems.org"];
275
- sha256 = "1wl7frfk68q6gsf6q6j32jl5m3yc0b9x8ycxz3hy79miaj9r5mll";
336
+ sha256 = "1mmb59323ldv6vxfmy98azgsla9k3di3fasvpb28hnn5bkx8fdff";
337
+ type = "gem";
338
+ };
339
+ version = "3.3.10.0";
340
+ };
341
+ pp = {
342
+ dependencies = ["prettyprint"];
343
+ groups = ["default" "development"];
344
+ platforms = [];
345
+ source = {
346
+ remotes = ["https://rubygems.org"];
347
+ sha256 = "1xlxmg86k5kifci1xvlmgw56x88dmqf04zfzn7zcr4qb8ladal99";
348
+ type = "gem";
349
+ };
350
+ version = "0.6.3";
351
+ };
352
+ prettyprint = {
353
+ groups = ["default" "development"];
354
+ platforms = [];
355
+ source = {
356
+ remotes = ["https://rubygems.org"];
357
+ sha256 = "14zicq3plqi217w6xahv7b8f7aj5kpxv1j1w98344ix9h5ay3j9b";
276
358
  type = "gem";
277
359
  };
278
- version = "3.3.9.0";
360
+ version = "0.2.0";
279
361
  };
280
362
  prism = {
281
363
  groups = ["default" "development"];
282
364
  platforms = [];
283
365
  source = {
284
366
  remotes = ["https://rubygems.org"];
285
- sha256 = "0gkhpdjib9zi9i27vd9djrxiwjia03cijmd6q8yj2q1ix403w3nw";
367
+ sha256 = "00silqnlzzm97gn21lm39q95hjn058waqky44j25r67p9drjy1hh";
286
368
  type = "gem";
287
369
  };
288
- version = "1.4.0";
370
+ version = "1.7.0";
371
+ };
372
+ psych = {
373
+ dependencies = ["date" "stringio"];
374
+ groups = ["default" "development"];
375
+ platforms = [];
376
+ source = {
377
+ remotes = ["https://rubygems.org"];
378
+ sha256 = "0x0r3gc66abv8i4dw0x0370b5hrshjfp6kpp7wbp178cy775fypb";
379
+ type = "gem";
380
+ };
381
+ version = "5.3.1";
289
382
  };
290
383
  racc = {
291
384
  groups = ["default" "development"];
@@ -312,20 +405,42 @@
312
405
  platforms = [];
313
406
  source = {
314
407
  remotes = ["https://rubygems.org"];
315
- sha256 = "14s4jdcs1a4saam9qmzbsa2bsh85rj9zfxny5z315x3gg0nhkxcn";
408
+ sha256 = "175iisqb211n0qbfyqd8jz2g01q6xj038zjf4q0nm8k6kz88k7lc";
409
+ type = "gem";
410
+ };
411
+ version = "13.3.1";
412
+ };
413
+ rdoc = {
414
+ dependencies = ["erb" "psych" "tsort"];
415
+ groups = ["development"];
416
+ platforms = [];
417
+ source = {
418
+ remotes = ["https://rubygems.org"];
419
+ sha256 = "1yc1xa3wckwwan518qii22jagqzlr5bypflx3nkvpdqr3ncd1qyz";
316
420
  type = "gem";
317
421
  };
318
- version = "13.3.0";
422
+ version = "7.0.3";
319
423
  };
320
424
  regexp_parser = {
321
425
  groups = ["default" "development"];
322
426
  platforms = [];
323
427
  source = {
324
428
  remotes = ["https://rubygems.org"];
325
- sha256 = "0qccah61pjvzyyg6mrp27w27dlv6vxlbznzipxjcswl7x3fhsvyb";
429
+ sha256 = "192mzi0wgwl024pwpbfa6c2a2xlvbh3mjd75a0sakdvkl60z64ya";
430
+ type = "gem";
431
+ };
432
+ version = "2.11.3";
433
+ };
434
+ reline = {
435
+ dependencies = ["io-console"];
436
+ groups = ["default" "development"];
437
+ platforms = [];
438
+ source = {
439
+ remotes = ["https://rubygems.org"];
440
+ sha256 = "0d8q5c4nh2g9pp758kizh8sfrvngynrjlm0i1zn3cnsnfd4v160i";
326
441
  type = "gem";
327
442
  };
328
- version = "2.10.0";
443
+ version = "0.6.3";
329
444
  };
330
445
  rspec = {
331
446
  dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
@@ -333,10 +448,10 @@
333
448
  platforms = [];
334
449
  source = {
335
450
  remotes = ["https://rubygems.org"];
336
- sha256 = "0h11wynaki22a40rfq3ahcs4r36jdpz9acbb3m5dkf0mm67sbydr";
451
+ sha256 = "11q5hagj6vr694innqj4r45jrm8qcwvkxjnphqgyd66piah88qi0";
337
452
  type = "gem";
338
453
  };
339
- version = "3.13.1";
454
+ version = "3.13.2";
340
455
  };
341
456
  rspec-core = {
342
457
  dependencies = ["rspec-support"];
@@ -344,10 +459,10 @@
344
459
  platforms = [];
345
460
  source = {
346
461
  remotes = ["https://rubygems.org"];
347
- sha256 = "18sgga9zjrd5579m9rpb78l7yn9a0bjzwz51z5kiq4y6jwl6hgxb";
462
+ sha256 = "0bcbh9yv6cs6pv299zs4bvalr8yxa51kcdd1pjl60yv625j3r0m8";
348
463
  type = "gem";
349
464
  };
350
- version = "3.13.5";
465
+ version = "3.13.6";
351
466
  };
352
467
  rspec-expectations = {
353
468
  dependencies = ["diff-lcs" "rspec-support"];
@@ -366,31 +481,31 @@
366
481
  platforms = [];
367
482
  source = {
368
483
  remotes = ["https://rubygems.org"];
369
- sha256 = "10gajm8iscl7gb8q926hyna83bw3fx2zb4sqdzjrznjs51pqlcz4";
484
+ sha256 = "071bqrk2rblk3zq3jk1xxx0dr92y0szi5pxdm8waimxici706y89";
370
485
  type = "gem";
371
486
  };
372
- version = "3.13.5";
487
+ version = "3.13.7";
373
488
  };
374
489
  rspec-support = {
375
490
  groups = ["default" "development"];
376
491
  platforms = [];
377
492
  source = {
378
493
  remotes = ["https://rubygems.org"];
379
- sha256 = "1xx3f4mgr84jz07fifd3r68hm6giqy91hqyzawmi0s59yqa1hjqq";
494
+ sha256 = "1cmgz34hwj5s3jwxhyl8mszs24nci12ffbrmr5jb1si74iqf739f";
380
495
  type = "gem";
381
496
  };
382
- version = "3.13.4";
497
+ version = "3.13.6";
383
498
  };
384
499
  rubocop = {
385
- dependencies = ["json" "language_server-protocol" "lint_roller" "parallel" "parser" "rainbow" "regexp_parser" "rubocop-ast" "ruby-progressbar" "tsort" "unicode-display_width"];
500
+ dependencies = ["json" "language_server-protocol" "lint_roller" "parallel" "parser" "rainbow" "regexp_parser" "rubocop-ast" "ruby-progressbar" "unicode-display_width"];
386
501
  groups = ["development"];
387
502
  platforms = [];
388
503
  source = {
389
504
  remotes = ["https://rubygems.org"];
390
- sha256 = "1gjvmxpvm6cv4mgviyfq3724dk5vlnir1lc3bllyvz7r2qxyh2f7";
505
+ sha256 = "0wz2np5ck54vpwcz18y9x7w80c308wza7gmfcykysq59ajkadw89";
391
506
  type = "gem";
392
507
  };
393
- version = "1.79.0";
508
+ version = "1.82.1";
394
509
  };
395
510
  rubocop-ast = {
396
511
  dependencies = ["parser" "prism"];
@@ -398,10 +513,10 @@
398
513
  platforms = [];
399
514
  source = {
400
515
  remotes = ["https://rubygems.org"];
401
- sha256 = "0ar3y8w36am483ynyzg0x8iwhn8h34y8f4agny4lyqcqbfnzd9qd";
516
+ sha256 = "1zbikzd6237fvlzjfxdlhwi2vbmavg1cc81y6cyr581365nnghs9";
402
517
  type = "gem";
403
518
  };
404
- version = "1.46.0";
519
+ version = "1.49.0";
405
520
  };
406
521
  rubocop-rake = {
407
522
  dependencies = ["lint_roller" "rubocop"];
@@ -420,10 +535,10 @@
420
535
  platforms = [];
421
536
  source = {
422
537
  remotes = ["https://rubygems.org"];
423
- sha256 = "0ya4815sp8g13w7a86sm0605fx7xyldck77f9pjjfrvpf5c21r60";
538
+ sha256 = "0cxb9i1brf1cks8anv8mdj65n9rq6jyldyd1ij9sj8zjng60si18";
424
539
  type = "gem";
425
540
  };
426
- version = "3.6.0";
541
+ version = "3.8.0";
427
542
  };
428
543
  ruby-progressbar = {
429
544
  groups = ["default" "development"];
@@ -466,16 +581,26 @@
466
581
  };
467
582
  version = "0.1.4";
468
583
  };
584
+ stringio = {
585
+ groups = ["default" "development"];
586
+ platforms = [];
587
+ source = {
588
+ remotes = ["https://rubygems.org"];
589
+ sha256 = "1q92y9627yisykyscv0bdsrrgyaajc2qr56dwlzx7ysgigjv4z63";
590
+ type = "gem";
591
+ };
592
+ version = "3.2.0";
593
+ };
469
594
  sys-uname = {
470
- dependencies = ["ffi"];
595
+ dependencies = ["ffi" "memoist3"];
471
596
  groups = ["default" "development"];
472
597
  platforms = [];
473
598
  source = {
474
599
  remotes = ["https://rubygems.org"];
475
- sha256 = "177l8rrqnb4rxf657mw28sgvgc8a2m7nlqcbdbra5m4xga0ypcxp";
600
+ sha256 = "05lsffr3v6brqyvhs621c8ghb211wac3l3a2nmgazs0fczn7h8pd";
476
601
  type = "gem";
477
602
  };
478
- version = "1.3.1";
603
+ version = "1.4.1";
479
604
  };
480
605
  thor = {
481
606
  groups = ["default" "development"];
@@ -503,29 +628,29 @@
503
628
  platforms = [];
504
629
  source = {
505
630
  remotes = ["https://rubygems.org"];
506
- sha256 = "1has87asspm6m9wgqas8ghhhwyf2i1yqrqgrkv47xw7jq3qjmbwc";
631
+ sha256 = "0hiwhnqpq271xqari6mg996fgjps42sffm9cpk6ljn8sd2srdp8c";
507
632
  type = "gem";
508
633
  };
509
- version = "3.1.4";
634
+ version = "3.2.0";
510
635
  };
511
636
  unicode-emoji = {
512
637
  groups = ["default" "development"];
513
638
  platforms = [];
514
639
  source = {
515
640
  remotes = ["https://rubygems.org"];
516
- sha256 = "0ajk6rngypm3chvl6r0vwv36q1931fjqaqhjjya81rakygvlwb1c";
641
+ sha256 = "03zqn207zypycbz5m9mn7ym763wgpk7hcqbkpx02wrbm1wank7ji";
517
642
  type = "gem";
518
643
  };
519
- version = "4.0.4";
644
+ version = "4.2.0";
520
645
  };
521
646
  yard = {
522
647
  groups = ["development"];
523
648
  platforms = [];
524
649
  source = {
525
650
  remotes = ["https://rubygems.org"];
526
- sha256 = "14k9lb9a60r9z2zcqg08by9iljrrgjxdkbd91gw17rkqkqwi1sd6";
651
+ sha256 = "03q1hf12csqy5q2inafzi44179zaq9n5yrb0k2j2llqhzcmbh7vj";
527
652
  type = "gem";
528
653
  };
529
- version = "0.9.37";
654
+ version = "0.9.38";
530
655
  };
531
656
  }
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "set"
4
-
5
3
  module Bashcov
6
4
  # Detect shell scripts
7
5
  class Detective
data/lib/bashcov/lexer.rb CHANGED
@@ -13,7 +13,7 @@ module Bashcov
13
13
  IGNORE_END_WITH = %w[(].freeze
14
14
 
15
15
  # Lines containing only one of these keywords are irrelevant for coverage
16
- IGNORE_IS = %w[esac if then else elif fi while do done { } ;;].freeze
16
+ IGNORE_IS = %w[esac if then else elif fi while do done { } ;; ( )].freeze
17
17
 
18
18
  # @param [String] filename File to analyze
19
19
  # @param [Hash] coverage Coverage with executed lines marked
@@ -41,7 +41,7 @@ module Bashcov
41
41
  # heredoc
42
42
  mark_multiline(
43
43
  lines, lineno,
44
- /\A[^\n]+<<-?'?(\w+)'?.*$.*\1/m
44
+ /\A[^\n]+<<-?\s*'?(\w+)'?.*$.*\1/m
45
45
  )
46
46
 
47
47
  # multiline string concatenated with backslashes
@@ -104,7 +104,7 @@ module Bashcov
104
104
  line.start_with?(*IGNORE_START_WITH) ||
105
105
  line.end_with?(*IGNORE_END_WITH)
106
106
 
107
- return false if line =~ /\A[a-zA-Z_][a-zA-Z0-9_\-:\.]*\(\)/ # function declared without the `function` keyword
107
+ return false if line =~ /\A[a-zA-Z_@][a-zA-Z0-9_@\-:.]*\(\)/ # function declared without the `function` keyword
108
108
  return false if line =~ /\A[^)]+\)\Z/ # case statement selector, e.g. `--help)`
109
109
 
110
110
  true
@@ -3,5 +3,5 @@
3
3
  # :nodoc:
4
4
  module Bashcov
5
5
  # Current Bashcov version
6
- VERSION = "3.2.0"
6
+ VERSION = "3.3.0"
7
7
  end
data/lib/bashcov.rb CHANGED
@@ -72,7 +72,9 @@ module Bashcov
72
72
  # this is used early for the `BASH_VERSION` definition, so first use will likely error
73
73
  begin
74
74
  return @options.bash_path if @options.bash_path
75
- rescue NoMethodError; end # rubocop:disable Lint/SuppressedException
75
+ rescue NoMethodError
76
+ nil
77
+ end
76
78
 
77
79
  # support the same `BASHCOV_BASH_PATH` environment variable used in the spec tests
78
80
  return ENV.fetch("BASHCOV_BASH_PATH", nil) unless ENV.fetch("BASHCOV_BASH_PATH", "").empty?
@@ -100,7 +102,7 @@ module Bashcov
100
102
  # Define option accessors
101
103
  Options.new.members.each do |option|
102
104
  [option, "#{option}="].each do |method|
103
- next if instance_methods(false).include?(method)
105
+ next if method_defined?(method, false)
104
106
 
105
107
  define_method method do |*args|
106
108
  options.public_send(*[method, *args])
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bashcov
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cédric Félizard
@@ -37,6 +37,20 @@ dependencies:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: benchmark
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
40
54
  - !ruby/object:Gem::Dependency
41
55
  name: bundler-audit
42
56
  requirement: !ruby/object:Gem::Requirement
@@ -79,6 +93,20 @@ dependencies:
79
93
  - - "~>"
80
94
  - !ruby/object:Gem::Version
81
95
  version: 1.16.0
96
+ - !ruby/object:Gem::Dependency
97
+ name: irb
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
82
110
  - !ruby/object:Gem::Dependency
83
111
  name: rake
84
112
  requirement: !ruby/object:Gem::Requirement
@@ -93,6 +121,20 @@ dependencies:
93
121
  - - ">="
94
122
  - !ruby/object:Gem::Version
95
123
  version: '0'
124
+ - !ruby/object:Gem::Dependency
125
+ name: rdoc
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
96
138
  - !ruby/object:Gem::Dependency
97
139
  name: rspec
98
140
  requirement: !ruby/object:Gem::Requirement
@@ -219,14 +261,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
219
261
  requirements:
220
262
  - - ">="
221
263
  - !ruby/object:Gem::Version
222
- version: 3.0.0
264
+ version: 3.2.0
223
265
  required_rubygems_version: !ruby/object:Gem::Requirement
224
266
  requirements:
225
267
  - - ">="
226
268
  - !ruby/object:Gem::Version
227
269
  version: '0'
228
270
  requirements: []
229
- rubygems_version: 3.6.7
271
+ rubygems_version: 4.0.6
230
272
  specification_version: 4
231
273
  summary: Code coverage tool for Bash
232
274
  test_files: []