hilight 0.1.1 → 0.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/Gemfile.lock +1 -1
- data/Guardfile +2 -2
- data/README.md +26 -0
- data/exe/hilight +37 -38
- data/lib/hilight.rb +49 -13
- data/lib/hilight/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d3881b5345185548a788caf2cab5d3a727b7d6edb201bfb62398f151dca7eebe
|
4
|
+
data.tar.gz: a6c71e1428bc23aced4111ad5248a3b08311cbf9bf4ff1e3fc0ea5eb84279abb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0dc73e7b18911d93db9cc214412edfc47ccd577b905241dc3a9d56bd64d923fea79d87fa93c82a718f23b0a25cd6613ee4efcb12012e196e8705ca89e279b79f
|
7
|
+
data.tar.gz: d36ebd749b4f0edb62f2a517fc497dedc0d6ac67e1bd7d097ccc692eca2313610d78dbd7e9147e15fa804421891c44540cc3d3114ad009babd6ea731149b7b84
|
data/Gemfile.lock
CHANGED
data/Guardfile
CHANGED
@@ -2,7 +2,7 @@ clearing :on
|
|
2
2
|
directories [".", "tmp"]
|
3
3
|
|
4
4
|
guard(:shell, timeout: 30) do
|
5
|
-
watch("exe/hilight") { puts `ruby exe/hilight` }
|
5
|
+
watch("exe/hilight") { puts `ruby exe/hilight rspec -h` }
|
6
6
|
end
|
7
7
|
|
8
8
|
group :main, halt_on_fail: true do
|
@@ -13,7 +13,7 @@ group :main, halt_on_fail: true do
|
|
13
13
|
watch(rspec.spec_helper) { rspec.spec_dir }
|
14
14
|
watch(rspec.spec_support) { rspec.spec_dir }
|
15
15
|
watch(rspec.spec_files)
|
16
|
-
|
16
|
+
watch('exe/hilight') { rspec.spec_dir }
|
17
17
|
ruby = dsl.ruby
|
18
18
|
dsl.watch_spec_files_for(ruby.lib_files)
|
19
19
|
end
|
data/README.md
CHANGED
@@ -100,3 +100,29 @@ Everyone interacting in the Hilight project’s codebases, issue trackers, chat
|
|
100
100
|
}
|
101
101
|
]
|
102
102
|
}```
|
103
|
+
|
104
|
+
|
105
|
+
(pick our input from cmd matching)
|
106
|
+
->(input)->(select our pattern[])->(stringify input)
|
107
|
+
->(add colors)->(stringify output)
|
108
|
+
|
109
|
+
|
110
|
+
### Pattern selection / cmdline matching
|
111
|
+
filter => Struct[:filter_regexp, :selected_patterns]
|
112
|
+
.find(input_string) (patterns)
|
113
|
+
|
114
|
+
|
115
|
+
### String IO Arch
|
116
|
+
pattern => Struct[:regexp, :replacement_pattern]
|
117
|
+
.transform(input_string) (String)
|
118
|
+
.transform_stream(IO) (IO)
|
119
|
+
.match?(input_string) (Boolean)
|
120
|
+
|
121
|
+
patterns => pattern[]
|
122
|
+
.transform(input_string, stop_on_first: false) (String)
|
123
|
+
.transform_stream(IO) (IO)
|
124
|
+
|
125
|
+
# major things to do
|
126
|
+
# remove need for termansi by wiring up my own color lambda's
|
127
|
+
# wire up themes via lamdas
|
128
|
+
# wire up loading (selective or otherwise) of a set of default hilight's
|
data/exe/hilight
CHANGED
@@ -3,54 +3,53 @@
|
|
3
3
|
require "hilight"
|
4
4
|
require 'term/ansicolor'
|
5
5
|
require 'open3'
|
6
|
+
require 'optparse'
|
6
7
|
|
7
8
|
include Hilight #rubocop:disable all
|
9
|
+
def split_opts(array)
|
10
|
+
cmd_start_index = array.find_index { |e| !e.start_with? "-" }
|
11
|
+
return [[], array] if !cmd_start_index || cmd_start_index.zero?
|
8
12
|
|
9
|
-
|
10
|
-
|
11
|
-
filters = [
|
12
|
-
Filter["rspec", Patterns[[
|
13
|
-
Pattern[/(?<green>\d+) examples, (?<red>\d+) failures, (?<yellow>\d+) pending/, '\k<green> examples, \k<red> failures, \k<yellow> pending'],
|
14
|
-
Pattern[/(?<blue>\d+\.\d+)/, '\k<blue>'],
|
15
|
-
Pattern[/\"(?<green>.*?)\"|\'(?<green>.*?)\'/, '\k<green>'],
|
16
|
-
Pattern[/# (?<red>.*):(?<yellow>\d+)/, '\k<red>:\k<yellow>']
|
17
|
-
]]],
|
18
|
-
Filter[/-h|--help|help/, Patterns[[
|
19
|
-
Pattern[%r{(?<yellow>\B-{1,2}[\w-]+)|(?<blue>[\[\]\(\)\{\}\<\>])|(?<green>["'].*?["'])}, '\k<yellow>\k<blue>\k<green>']
|
20
|
-
]]],
|
21
|
-
Filter["git", Patterns[[Pattern[/(?<green>'.*')|(?<blue>".*")/, '\k<green>\k<blue>']]]],
|
22
|
-
Filter["ruby", Patterns[[
|
23
|
-
Pattern[/(.*from |)(?<red>.*):(?<blue>\d+)(?::in )(?<yellow>`.*')/, '\k<red>\k<blue>\k<yellow>']
|
24
|
-
]]],
|
25
|
-
Filter["default", Patterns[[
|
26
|
-
Pattern[/(?<green>'.*')|(?<blue>".*")/, '\k<green>\k<blue>']
|
27
|
-
]]]
|
28
|
-
]
|
29
|
-
|
30
|
-
Filter.define_method(:match?) do |string|
|
31
|
-
case cmd
|
32
|
-
when (String || Symbol) then (cmd.to_s == string.to_s)
|
33
|
-
when Regexp then (cmd.match? string.to_s)
|
34
|
-
else false
|
35
|
-
end
|
13
|
+
[array[0..cmd_start_index - 1], array[cmd_start_index..-1]]
|
36
14
|
end
|
37
15
|
|
38
|
-
|
39
|
-
|
40
|
-
|
16
|
+
rspec = Fabric['rspec', [
|
17
|
+
/(?<green>\d+) examples, (?<red>\d+) failures?, (?<yellow>\d+) pending/,
|
18
|
+
/(?<blue>\d+\.\d+)/,
|
19
|
+
/\"(?<green>.*?)\"|\'(?<green>.*?)\'/,
|
20
|
+
/# (?<red>.*):(?<yellow>\d+)/
|
21
|
+
]]
|
22
|
+
|
23
|
+
help = Fabric[/-h|--help|help/, /(?<yellow>\B-{1,2}[\w-]+)|(?<blue>[\[\]\(\)\{\}\<\>])|(?<green>["'].*?["'])/]
|
24
|
+
git = Fabric["git", /(?<green>'.*?')|(?<blue>".*?")/]
|
25
|
+
ruby = Fabric['ruby', /(.*from |)(?<red>.*):(?<blue>\d+)(?::in )(?<yellow>`.*')/]
|
26
|
+
default = Fabric['default', /(?<green>\d+\.\d+)|(?<blue>".*")/]
|
27
|
+
|
28
|
+
fabrics = [rspec, git, ruby, help, default]
|
29
|
+
|
30
|
+
options = {}
|
31
|
+
|
32
|
+
parser = OptionParser.new do |opts|
|
33
|
+
opts.banner = "Usage: hilight <cmd>"
|
34
|
+
|
35
|
+
opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
|
36
|
+
options[:verbose] = v
|
37
|
+
end
|
41
38
|
end
|
42
39
|
|
43
|
-
|
44
|
-
|
40
|
+
arguments, cmd = split_opts ARGV
|
41
|
+
parser.parse arguments
|
45
42
|
|
46
|
-
|
43
|
+
if cmd.any?
|
44
|
+
cmd_string = cmd.join(' ')
|
47
45
|
|
48
|
-
|
46
|
+
fabric = fabrics.find { |f| f.match? cmd_string }
|
47
|
+
fabric ||= default
|
49
48
|
|
50
|
-
|
49
|
+
output, process = Open3.capture2e(cmd_string)
|
50
|
+
print fabric.transform output
|
51
51
|
|
52
52
|
exit process.exitstatus
|
53
|
+
else
|
54
|
+
$stdout << default.transform($stdin.readline) until $stdin.eof?
|
53
55
|
end
|
54
|
-
|
55
|
-
abort 'hilight <cmd>' unless ARGV.any?
|
56
|
-
filters.run
|
data/lib/hilight.rb
CHANGED
@@ -1,22 +1,58 @@
|
|
1
1
|
require "hilight/version"
|
2
2
|
require 'term/ansicolor'
|
3
3
|
|
4
|
-
Hilight
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
# map our input into the output, return the original if it doesn't map (replace) anything.
|
9
|
-
input.gsub!(regexp, replacement) || input
|
4
|
+
Hilight.define_singleton_method(:load) do |filename|
|
5
|
+
return Kernel.load filename if File.exist? filename
|
6
|
+
|
7
|
+
Kernel.load "#{Dir.home}/.config/hilight/patterns/#{filename}"
|
10
8
|
end
|
11
9
|
|
12
|
-
Hilight
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
Hilight.define_singleton_method(:transform) do |input, regexps = []|
|
11
|
+
raise ArgumentError, "#{input} is not a kind of String" unless input.is_a? String
|
12
|
+
raise ArgumentError, "#{input} is not a kind of Array or Regexp" unless regexps.is_a?(Array) || regexps.is_a?(Regexp)
|
13
|
+
|
14
|
+
regexp = Regexp.union regexps
|
15
|
+
|
16
|
+
match = regexp.match input
|
17
|
+
return input unless match
|
18
|
+
|
19
|
+
output = []
|
20
|
+
while match
|
21
|
+
output.push match.pre_match unless match.pre_match.empty?
|
22
|
+
|
23
|
+
captured_string = match.to_a[0]
|
24
|
+
color_lookup_list = match.named_captures.invert
|
25
|
+
|
26
|
+
match.to_a[1..-1].each do |s|
|
27
|
+
next unless s
|
28
|
+
|
29
|
+
color = color_lookup_list[s]
|
30
|
+
captured_string.gsub!(s, Term::ANSIColor.color(color, s))
|
31
|
+
end
|
32
|
+
|
33
|
+
output.push captured_string if captured_string
|
34
|
+
|
35
|
+
post_match = match.post_match
|
36
|
+
match = regexp.match(match.post_match)
|
37
|
+
|
38
|
+
output.push post_match unless match
|
39
|
+
end
|
40
|
+
|
41
|
+
output.join("")
|
16
42
|
end
|
17
43
|
|
18
|
-
Hilight.
|
19
|
-
|
44
|
+
Hilight::Fabric = Struct.new :pattern, :regexps
|
45
|
+
Hilight::Fabric.define_method(:match?) do |string|
|
46
|
+
raise ArgumentError, "#{string} is not a kind of String" unless string.is_a? String
|
20
47
|
|
21
|
-
|
48
|
+
case pattern
|
49
|
+
when Symbol then (pattern.to_s == string)
|
50
|
+
when String then (pattern == string)
|
51
|
+
when Regexp then (pattern.match? string.to_s)
|
52
|
+
else false
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
Hilight::Fabric.define_method(:transform) do |string|
|
57
|
+
Hilight.transform string, regexps
|
22
58
|
end
|
data/lib/hilight/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hilight
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ernie Brodeur
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: term-ansicolor
|