hilight 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|