spoom 1.1.5 → 1.1.6

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: 526b44a6bb1b2ec6b8b09a3bec42264f86b2803c561c4862d622c374893d529a
4
- data.tar.gz: ac616a998a9800706ca28d805d5e975b35e78fb4c0b725463938b4b925f24728
3
+ metadata.gz: e58e5584ba33b3b678ddedb06972121af9dd4b9a8b7f1b6941f6bb939086107a
4
+ data.tar.gz: c1cc668af1f42ace8318a47ac0b813815e4e6a9ee1d942593b1ff37b9b41cbc2
5
5
  SHA512:
6
- metadata.gz: c6cf08eb1fe7d880e8dfae54352d554b83c41ff6878546b84d986fdbb17fa95244b1630f31aa0f1ccd14ef843dc71d80bd3236715d16165c7c1a0a6fc7271502
7
- data.tar.gz: ea376f188b1a33a83784f4e7923ba4087cd2891f10deacf998b145c724f586f76e2cfda338011f50d7990b8b860720eb832f365c5a6541042453d3381e45c871
6
+ metadata.gz: f389c4b463b7bd1c4a275e844ed68d0d9e7279fefe4b1e9ed29a1c9238c25ad941aa494dee63c4f15dab288602a22efce3da6e7b08c795b1cb99fb236e2edf39
7
+ data.tar.gz: 7071bc29a1d13087d0e0527832b7619af180b20375c006122d059c640a606a55edd68234e098cf2360f06c00aa165a7a673a4d009275707be830bebef947936a
data/Gemfile CHANGED
@@ -5,8 +5,9 @@ source "https://rubygems.org"
5
5
 
6
6
  gemspec
7
7
 
8
- group(:development) do
9
- gem('rubocop-shopify', require: false)
10
- gem('rubocop-sorbet', require: false)
11
- gem('pry-byebug')
8
+ group :development do
9
+ gem "pry-byebug"
10
+ gem "rubocop-shopify", require: false
11
+ gem "rubocop-sorbet", require: false
12
+ gem "tapioca", require: false
12
13
  end
data/README.md CHANGED
@@ -358,4 +358,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
358
358
 
359
359
  ## Code of Conduct
360
360
 
361
- Everyone interacting in the Spoom project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/Shopify/spoom/blob/master/CODE_OF_CONDUCT.md).
361
+ Everyone interacting in the Spoom project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/Shopify/spoom/blob/main/CODE_OF_CONDUCT.md).
@@ -83,14 +83,22 @@ module Spoom
83
83
  exit(files_to_bump.empty?)
84
84
  end
85
85
 
86
- output, no_errors = Sorbet.srb_tc(
86
+ output, status, exit_code = Sorbet.srb_tc(
87
87
  "--no-error-sections",
88
88
  path: exec_path,
89
89
  capture_err: true,
90
90
  sorbet_bin: options[:sorbet]
91
91
  )
92
92
 
93
- if no_errors
93
+ check_sorbet_segfault(exit_code) do
94
+ say_error(<<~ERR, status: nil)
95
+ It means one of the file bumped to `typed: #{to}` made Sorbet crash.
96
+ Run `spoom bump -f` locally followed by `bundle exec srb tc` to investigate the problem.
97
+ ERR
98
+ undo_changes(files_to_bump, from)
99
+ end
100
+
101
+ if status
94
102
  print_changes(files_to_bump, command: cmd, from: from, to: to, dry: dry, path: exec_path)
95
103
  undo_changes(files_to_bump, from) if dry
96
104
  exit(files_to_bump.empty?)
@@ -83,6 +83,20 @@ module Spoom
83
83
  Sorbet::Config.parse_file(sorbet_config_file)
84
84
  end
85
85
 
86
+ sig { params(exit_code: Integer, block: T.nilable(T.proc.void)).void }
87
+ def check_sorbet_segfault(exit_code, &block)
88
+ return unless exit_code == Spoom::Sorbet::SEGFAULT_CODE
89
+
90
+ say_error(<<~ERR, status: nil)
91
+ #{red("!!! Sorbet exited with code #{exit_code} - SEGFAULT !!!")}
92
+
93
+ This is most likely related to a bug in Sorbet.
94
+ ERR
95
+
96
+ block&.call
97
+ exit(exit_code)
98
+ end
99
+
86
100
  # Colors
87
101
 
88
102
  # Color used to highlight expressions in backticks
@@ -129,6 +143,11 @@ module Spoom
129
143
  colorize(string, Color::BLUE)
130
144
  end
131
145
 
146
+ sig { params(string: String).returns(String) }
147
+ def cyan(string)
148
+ colorize(string, Color::CYAN)
149
+ end
150
+
132
151
  sig { params(string: String).returns(String) }
133
152
  def gray(string)
134
153
  colorize(string, Color::LIGHT_BLACK)
data/lib/spoom/cli/run.rb CHANGED
@@ -35,12 +35,27 @@ module Spoom
35
35
  sorbet = options[:sorbet]
36
36
 
37
37
  unless limit || code || sort
38
- output, status = T.unsafe(Spoom::Sorbet).srb_tc(*arg, path: path, capture_err: false, sorbet_bin: sorbet)
38
+ output, status, exit_code = T.unsafe(Spoom::Sorbet).srb_tc(
39
+ *arg,
40
+ path: path,
41
+ capture_err: false,
42
+ sorbet_bin: sorbet
43
+ )
44
+
45
+ check_sorbet_segfault(exit_code)
39
46
  say_error(output, status: nil, nl: false)
40
47
  exit(status)
41
48
  end
42
49
 
43
- output, status = T.unsafe(Spoom::Sorbet).srb_tc(*arg, path: path, capture_err: true, sorbet_bin: sorbet)
50
+ output, status, exit_code = T.unsafe(Spoom::Sorbet).srb_tc(
51
+ *arg,
52
+ path: path,
53
+ capture_err: true,
54
+ sorbet_bin: sorbet
55
+ )
56
+
57
+ check_sorbet_segfault(exit_code)
58
+
44
59
  if status
45
60
  say_error(output, status: nil, nl: false)
46
61
  exit(0)
@@ -99,7 +114,7 @@ module Spoom
99
114
  cyan = !cyan
100
115
  next
101
116
  end
102
- word << (cyan ? c.cyan : c.red)
117
+ word << (cyan ? cyan(c) : red(c))
103
118
  end
104
119
  word.string
105
120
  end
@@ -2,6 +2,7 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require_relative "../../printer"
5
+ require "set"
5
6
 
6
7
  module Spoom
7
8
  module LSP
data/lib/spoom/sorbet.rb CHANGED
@@ -15,6 +15,8 @@ module Spoom
15
15
  GEM_PATH = Gem::Specification.find_by_name("sorbet-static").full_gem_path
16
16
  BIN_PATH = (Pathname.new(GEM_PATH) / "libexec" / "sorbet").to_s
17
17
 
18
+ SEGFAULT_CODE = 139
19
+
18
20
  class << self
19
21
  extend T::Sig
20
22
 
@@ -24,7 +26,7 @@ module Spoom
24
26
  path: String,
25
27
  capture_err: T::Boolean,
26
28
  sorbet_bin: T.nilable(String)
27
- ).returns([String, T::Boolean])
29
+ ).returns([String, T::Boolean, Integer])
28
30
  end
29
31
  def srb(*arg, path: '.', capture_err: false, sorbet_bin: nil)
30
32
  if sorbet_bin
@@ -41,7 +43,7 @@ module Spoom
41
43
  path: String,
42
44
  capture_err: T::Boolean,
43
45
  sorbet_bin: T.nilable(String)
44
- ).returns([String, T::Boolean])
46
+ ).returns([String, T::Boolean, Integer])
45
47
  end
46
48
  def srb_tc(*arg, path: '.', capture_err: false, sorbet_bin: nil)
47
49
  arg.prepend("tc") unless sorbet_bin
data/lib/spoom/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Spoom
5
- VERSION = "1.1.5"
5
+ VERSION = "1.1.6"
6
6
  end
data/lib/spoom.rb CHANGED
@@ -2,6 +2,7 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "sorbet-runtime"
5
+ require "pathname"
5
6
 
6
7
  module Spoom
7
8
  extend T::Sig
@@ -16,12 +17,14 @@ module Spoom
16
17
  arg: String,
17
18
  path: String,
18
19
  capture_err: T::Boolean
19
- ).returns([String, T::Boolean])
20
+ ).returns([String, T::Boolean, Integer])
20
21
  end
21
22
  def self.exec(cmd, *arg, path: '.', capture_err: false)
22
23
  method = capture_err ? "popen2e" : "popen2"
23
- Open3.send(method, [cmd, *arg].join(" "), chdir: path) do |_, o, t|
24
- [o.read, T.cast(t.value, Process::Status).success?]
24
+ Open3.send(method, [cmd, *arg].join(" "), chdir: path) do |_, stdout, thread|
25
+ out = stdout.read
26
+ status = T.cast(thread.value, Process::Status)
27
+ [out, status.success?, status.exitstatus]
25
28
  end
26
29
  end
27
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spoom
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.5
4
+ version: 1.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandre Terrasa
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-18 00:00:00.000000000 Z
11
+ date: 2021-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest-reporters
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: sorbet-runtime
57
71
  requirement: !ruby/object:Gem::Requirement