spoom 1.1.16 → 1.2.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 +4 -4
- data/lib/spoom/cli/bump.rb +3 -11
- data/lib/spoom/cli/config.rb +4 -3
- data/lib/spoom/cli/coverage.rb +14 -15
- data/lib/spoom/cli/helper.rb +11 -21
- data/lib/spoom/cli/lsp.rb +4 -2
- data/lib/spoom/cli/run.rb +3 -7
- data/lib/spoom/cli.rb +4 -7
- data/lib/spoom/context/bundle.rb +58 -0
- data/lib/spoom/context/exec.rb +50 -0
- data/lib/spoom/context/file_system.rb +93 -0
- data/lib/spoom/context/git.rb +121 -0
- data/lib/spoom/context/sorbet.rb +136 -0
- data/lib/spoom/context.rb +16 -200
- data/lib/spoom/coverage.rb +20 -35
- data/lib/spoom/sorbet.rb +0 -119
- data/lib/spoom/timeline.rb +5 -8
- data/lib/spoom/version.rb +1 -1
- data/lib/spoom.rb +0 -52
- metadata +8 -4
- data/lib/spoom/git.rb +0 -109
data/lib/spoom.rb
CHANGED
@@ -10,58 +10,6 @@ module Spoom
|
|
10
10
|
SPOOM_PATH = T.let((Pathname.new(__FILE__) / ".." / "..").to_s, String)
|
11
11
|
|
12
12
|
class Error < StandardError; end
|
13
|
-
|
14
|
-
class ExecResult < T::Struct
|
15
|
-
extend T::Sig
|
16
|
-
|
17
|
-
const :out, String
|
18
|
-
const :err, T.nilable(String)
|
19
|
-
const :status, T::Boolean
|
20
|
-
const :exit_code, Integer
|
21
|
-
|
22
|
-
sig { returns(String) }
|
23
|
-
def to_s
|
24
|
-
<<~STR
|
25
|
-
########## STDOUT ##########
|
26
|
-
#{out.empty? ? "<empty>" : out}
|
27
|
-
########## STDERR ##########
|
28
|
-
#{err&.empty? ? "<empty>" : err}
|
29
|
-
########## STATUS: #{status} ##########
|
30
|
-
STR
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
class << self
|
35
|
-
extend T::Sig
|
36
|
-
|
37
|
-
sig do
|
38
|
-
params(
|
39
|
-
cmd: String,
|
40
|
-
arg: String,
|
41
|
-
path: String,
|
42
|
-
capture_err: T::Boolean,
|
43
|
-
).returns(ExecResult)
|
44
|
-
end
|
45
|
-
def exec(cmd, *arg, path: ".", capture_err: true)
|
46
|
-
if capture_err
|
47
|
-
stdout, stderr, status = T.unsafe(Open3).capture3([cmd, *arg].join(" "), chdir: path)
|
48
|
-
ExecResult.new(
|
49
|
-
out: stdout,
|
50
|
-
err: stderr,
|
51
|
-
status: status.success?,
|
52
|
-
exit_code: status.exitstatus,
|
53
|
-
)
|
54
|
-
else
|
55
|
-
stdout, status = T.unsafe(Open3).capture2([cmd, *arg].join(" "), chdir: path)
|
56
|
-
ExecResult.new(
|
57
|
-
out: stdout,
|
58
|
-
err: nil,
|
59
|
-
status: status.success?,
|
60
|
-
exit_code: status.exitstatus,
|
61
|
-
)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
13
|
end
|
66
14
|
|
67
15
|
require "spoom/context"
|
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.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexandre Terrasa
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-03-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -130,6 +130,11 @@ files:
|
|
130
130
|
- lib/spoom/cli/run.rb
|
131
131
|
- lib/spoom/colors.rb
|
132
132
|
- lib/spoom/context.rb
|
133
|
+
- lib/spoom/context/bundle.rb
|
134
|
+
- lib/spoom/context/exec.rb
|
135
|
+
- lib/spoom/context/file_system.rb
|
136
|
+
- lib/spoom/context/git.rb
|
137
|
+
- lib/spoom/context/sorbet.rb
|
133
138
|
- lib/spoom/coverage.rb
|
134
139
|
- lib/spoom/coverage/d3.rb
|
135
140
|
- lib/spoom/coverage/d3/base.rb
|
@@ -139,7 +144,6 @@ files:
|
|
139
144
|
- lib/spoom/coverage/report.rb
|
140
145
|
- lib/spoom/coverage/snapshot.rb
|
141
146
|
- lib/spoom/file_tree.rb
|
142
|
-
- lib/spoom/git.rb
|
143
147
|
- lib/spoom/printer.rb
|
144
148
|
- lib/spoom/sorbet.rb
|
145
149
|
- lib/spoom/sorbet/config.rb
|
@@ -175,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
179
|
- !ruby/object:Gem::Version
|
176
180
|
version: '0'
|
177
181
|
requirements: []
|
178
|
-
rubygems_version: 3.
|
182
|
+
rubygems_version: 3.4.9
|
179
183
|
signing_key:
|
180
184
|
specification_version: 4
|
181
185
|
summary: Useful tools for Sorbet enthusiasts.
|
data/lib/spoom/git.rb
DELETED
@@ -1,109 +0,0 @@
|
|
1
|
-
# typed: strict
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "time"
|
5
|
-
|
6
|
-
module Spoom
|
7
|
-
# Execute git commands
|
8
|
-
module Git
|
9
|
-
class Commit < T::Struct
|
10
|
-
extend T::Sig
|
11
|
-
|
12
|
-
const :sha, String
|
13
|
-
const :time, Time
|
14
|
-
|
15
|
-
sig { returns(Integer) }
|
16
|
-
def timestamp
|
17
|
-
time.to_i
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
class << self
|
22
|
-
extend T::Sig
|
23
|
-
|
24
|
-
# Git commands
|
25
|
-
|
26
|
-
sig { params(arg: String, path: String).returns(ExecResult) }
|
27
|
-
def checkout(*arg, path: ".")
|
28
|
-
Spoom.exec("git checkout -q #{arg.join(" ")}", path: path)
|
29
|
-
end
|
30
|
-
|
31
|
-
sig { params(arg: String, path: String).returns(ExecResult) }
|
32
|
-
def diff(*arg, path: ".")
|
33
|
-
Spoom.exec("git diff #{arg.join(" ")}", path: path)
|
34
|
-
end
|
35
|
-
|
36
|
-
sig { params(arg: String, path: String).returns(ExecResult) }
|
37
|
-
def log(*arg, path: ".")
|
38
|
-
Spoom.exec("git log #{arg.join(" ")}", path: path)
|
39
|
-
end
|
40
|
-
|
41
|
-
sig { params(arg: String, path: String).returns(ExecResult) }
|
42
|
-
def show(*arg, path: ".")
|
43
|
-
Spoom.exec("git show #{arg.join(" ")}", path: path)
|
44
|
-
end
|
45
|
-
|
46
|
-
sig { params(path: String).returns(T.nilable(String)) }
|
47
|
-
def current_branch(path: ".")
|
48
|
-
result = Spoom.exec("git branch --show-current", path: path)
|
49
|
-
return nil unless result.status
|
50
|
-
|
51
|
-
result.out.strip
|
52
|
-
end
|
53
|
-
|
54
|
-
# Utils
|
55
|
-
|
56
|
-
# Get the last commit in the currently checked out branch
|
57
|
-
sig { params(path: String, short_sha: T::Boolean).returns(T.nilable(Commit)) }
|
58
|
-
def last_commit(path: ".", short_sha: true)
|
59
|
-
result = log("HEAD --format='%#{short_sha ? "h" : "H"} %at' -1", path: path)
|
60
|
-
return nil unless result.status
|
61
|
-
|
62
|
-
out = result.out.strip
|
63
|
-
return nil if out.empty?
|
64
|
-
|
65
|
-
parse_commit(out)
|
66
|
-
end
|
67
|
-
|
68
|
-
# Is there uncommited changes in `path`?
|
69
|
-
sig { params(path: String).returns(T::Boolean) }
|
70
|
-
def workdir_clean?(path: ".")
|
71
|
-
diff("HEAD", path: path).out.empty?
|
72
|
-
end
|
73
|
-
|
74
|
-
# Get the commit introducing the `sorbet/config` file
|
75
|
-
sig { params(path: String).returns(T.nilable(Commit)) }
|
76
|
-
def sorbet_intro_commit(path: ".")
|
77
|
-
result = log("--diff-filter=A --format='%h %at' -1 -- sorbet/config", path: path)
|
78
|
-
return nil unless result.status
|
79
|
-
|
80
|
-
out = result.out.strip
|
81
|
-
return nil if out.empty?
|
82
|
-
|
83
|
-
parse_commit(out)
|
84
|
-
end
|
85
|
-
|
86
|
-
# Get the commit removing the `sorbet/config` file
|
87
|
-
sig { params(path: String).returns(T.nilable(Commit)) }
|
88
|
-
def sorbet_removal_commit(path: ".")
|
89
|
-
result = log("--diff-filter=D --format='%h %at' -1 -- sorbet/config", path: path)
|
90
|
-
return nil unless result.status
|
91
|
-
|
92
|
-
out = result.out.strip
|
93
|
-
return nil if out.empty?
|
94
|
-
|
95
|
-
parse_commit(out)
|
96
|
-
end
|
97
|
-
|
98
|
-
# Parse a line formated as `%h %at` into a `Commit`
|
99
|
-
sig { params(string: String).returns(T.nilable(Commit)) }
|
100
|
-
def parse_commit(string)
|
101
|
-
sha, epoch = string.split(" ", 2)
|
102
|
-
return nil unless sha && epoch
|
103
|
-
|
104
|
-
time = Time.strptime(epoch, "%s")
|
105
|
-
Commit.new(sha: sha, time: time)
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|