rak 0.9 → 1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +11 -0
- data/README.txt +3 -3
- data/bin/rak +50 -20
- data/lib/rak.rb +1 -1
- data/spec/rak_spec.rb +11 -4
- metadata +65 -43
data/History.txt
CHANGED
@@ -1,4 +1,15 @@
|
|
1
1
|
|
2
|
+
== 1.0 / 2009-09-27
|
3
|
+
|
4
|
+
* MinGW is a valid Windows platform type.
|
5
|
+
* Can use ~bang and ~ques in a regex and they will be turned into ! and ?
|
6
|
+
This is to get around bash.
|
7
|
+
* Added -k negative file match option (Contributed by Juozas Gaigalas')
|
8
|
+
* Added .cc and .hpp to the C++ file types
|
9
|
+
* Added Vala file types
|
10
|
+
* 20% faster on average
|
11
|
+
* Moved to Github
|
12
|
+
|
2
13
|
== 0.9 / 2008-02-03
|
3
14
|
|
4
15
|
* Added .rake to ruby files
|
data/README.txt
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
rak
|
2
|
-
|
3
|
-
|
2
|
+
http://rubyforge.org/projects/rak
|
3
|
+
Daniel Lucraft (http://danlucraft.com/blog/)
|
4
4
|
|
5
5
|
== DESCRIPTION:
|
6
|
-
|
6
|
+
|
7
7
|
Replacement for grep. Recursively scans directories to match a given
|
8
8
|
Ruby regular expression. Prints highlighted results.
|
9
9
|
|
data/bin/rak
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
4
|
|
5
|
-
if RUBY_PLATFORM =~ /mswin/
|
5
|
+
if RUBY_PLATFORM =~ /mswin|mingw/
|
6
6
|
begin
|
7
7
|
require 'win32console'
|
8
8
|
rescue LoadError
|
@@ -20,8 +20,6 @@ rescue LoadError
|
|
20
20
|
$use_onig = false
|
21
21
|
end
|
22
22
|
|
23
|
-
$use_onig = false
|
24
|
-
|
25
23
|
class Rak
|
26
24
|
VERSION = "0.9"
|
27
25
|
|
@@ -42,7 +40,7 @@ END
|
|
42
40
|
FILE_TYPES = {
|
43
41
|
:asm => %w( .s .S ),
|
44
42
|
:cc => %w( .c .h .xs ),
|
45
|
-
:cpp => %w( .cpp .m .h .C .H ),
|
43
|
+
:cpp => %w( .cpp .cc .m .h .hpp .C .H ),
|
46
44
|
:csharp => %w( .cs ),
|
47
45
|
:css => %w( .css ),
|
48
46
|
:elisp => %w( .el ),
|
@@ -69,6 +67,7 @@ END
|
|
69
67
|
:tex => %w( .tex .cls .sty ),
|
70
68
|
:text => %w( .txt .text ),
|
71
69
|
:tt => %w( .tt .tt2 .ttml ),
|
70
|
+
:vala => %w( .vala .vapi ),
|
72
71
|
:vb => %w( .bas .cls .frm .ctl .vb .resx ),
|
73
72
|
:vim => %w( .vim ),
|
74
73
|
:yaml => %w( .yaml .yml ),
|
@@ -134,6 +133,7 @@ END
|
|
134
133
|
[ '--before-context', '-B', GetoptLong::REQUIRED_ARGUMENT ],
|
135
134
|
[ '--context', '-C', GetoptLong::OPTIONAL_ARGUMENT ],
|
136
135
|
[ '-g', GetoptLong::REQUIRED_ARGUMENT ],
|
136
|
+
[ '-k', GetoptLong::REQUIRED_ARGUMENT ],
|
137
137
|
[ '-x', '--line-regexp', GetoptLong::NO_ARGUMENT ],
|
138
138
|
[ '-s', '--line-start', GetoptLong::NO_ARGUMENT ],
|
139
139
|
[ '-e', '--line-end', GetoptLong::NO_ARGUMENT ]
|
@@ -170,6 +170,7 @@ END
|
|
170
170
|
opt[:before_context] = 0
|
171
171
|
opt[:collect_context] = false
|
172
172
|
opt[:filename_regex] = nil
|
173
|
+
opt[:neg_filename_regex] = nil
|
173
174
|
|
174
175
|
# if redirected (RAK_TEST allows us to redirect in testing and still
|
175
176
|
# get the non-redirected defaults).
|
@@ -291,6 +292,8 @@ END
|
|
291
292
|
opt[:after_context] = val
|
292
293
|
when '-g'
|
293
294
|
opt[:filename_regex] = arg
|
295
|
+
when '-k'
|
296
|
+
opt[:neg_filename_regex] = arg
|
294
297
|
when '-x'
|
295
298
|
opt[:match_whole_lines] = true
|
296
299
|
when '-s'
|
@@ -452,6 +455,16 @@ END
|
|
452
455
|
files = files.select {|fn| fn =~ fn_re }
|
453
456
|
end
|
454
457
|
|
458
|
+
# filter based on -k=REGEX
|
459
|
+
if opt[:neg_filename_regex]
|
460
|
+
if $use_onig
|
461
|
+
fn_re = Oniguruma::ORegexp.new(opt[:neg_filename_regex])
|
462
|
+
else
|
463
|
+
fn_re = Regexp.new(opt[:neg_filename_regex])
|
464
|
+
end
|
465
|
+
files = files.reject {|fn| fn =~ fn_re }
|
466
|
+
end
|
467
|
+
|
455
468
|
# remove the "./"
|
456
469
|
files.map! {|fn| fn[0..1] == "./" ? fn[2..-1] : fn}
|
457
470
|
|
@@ -469,16 +482,20 @@ END
|
|
469
482
|
rescue
|
470
483
|
line = ""
|
471
484
|
end
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
485
|
+
begin
|
486
|
+
if line =~ /^#!/
|
487
|
+
if line =~ /\b(ruby|perl|php|python)\b/
|
488
|
+
return "."+FILE_TYPES[$1.intern].first
|
489
|
+
elsif line =~ /\b(bash|csh|ksh|zsh)\b/
|
490
|
+
return ".sh"
|
491
|
+
end
|
492
|
+
else
|
493
|
+
if line =~ /\Q<?xml /
|
494
|
+
return ".xml"
|
477
495
|
end
|
478
|
-
else
|
479
|
-
if line =~ /\Q<?xml /
|
480
|
-
return ".xml"
|
481
496
|
end
|
497
|
+
rescue
|
498
|
+
return nil
|
482
499
|
end
|
483
500
|
return false
|
484
501
|
end
|
@@ -500,6 +517,7 @@ END
|
|
500
517
|
if opt[:match_line_ends]
|
501
518
|
str = str + "$"
|
502
519
|
end
|
520
|
+
str = str.gsub("~bang", "!").gsub("~ques", "?")
|
503
521
|
if $use_onig
|
504
522
|
if opt[:ignore_case]
|
505
523
|
re = Oniguruma::ORegexp.new(str, :options => Oniguruma::OPTION_IGNORECASE)
|
@@ -523,10 +541,7 @@ END
|
|
523
541
|
# the match method based on them. This is gives a 2x speedup over
|
524
542
|
# the alternative.
|
525
543
|
def self.compile_match_file
|
526
|
-
code =
|
527
|
-
def code.<<(str)
|
528
|
-
self.concat(str + "\n")
|
529
|
-
end
|
544
|
+
code = []
|
530
545
|
code << %{def self.match_file(re, fn) }
|
531
546
|
code << %{ displayed_filename = false }
|
532
547
|
code << %{ count = 0 }
|
@@ -544,7 +559,19 @@ END
|
|
544
559
|
code << %{ f = fn }
|
545
560
|
code << %{ end }
|
546
561
|
|
547
|
-
code << %{ f.
|
562
|
+
code << %{ all = f.read }
|
563
|
+
# code << %{ p fn }
|
564
|
+
# code << %{ all =~ re rescue p all }
|
565
|
+
code << %{ if all !~ re and not opt[:invert_match] and not opt[:print_entire_line_if_no_match] }
|
566
|
+
if opt[:print_file_if_no_match]
|
567
|
+
code << %{ if count == 0 }
|
568
|
+
code << %{ puts fn }
|
569
|
+
code << %{ end }
|
570
|
+
end
|
571
|
+
code << %{ return }
|
572
|
+
code << %{ end }
|
573
|
+
|
574
|
+
code << %{ all.each_line do |line| }
|
548
575
|
code << %{ i += 1 }
|
549
576
|
code << %{ rest = line }
|
550
577
|
code << %{ while md = re.match(rest) }
|
@@ -651,7 +678,9 @@ END
|
|
651
678
|
if opt[:invert_match]
|
652
679
|
code << %{ puts "\#{fn}:\#{i-count}" }
|
653
680
|
else
|
654
|
-
code << %{
|
681
|
+
code << %{ if count > 0 }
|
682
|
+
code << %{ puts "\#{fn}:\#{count}" }
|
683
|
+
code << %{ end }
|
655
684
|
end
|
656
685
|
end
|
657
686
|
if opt[:print_file_if_match]
|
@@ -666,7 +695,7 @@ END
|
|
666
695
|
code << %{ end }
|
667
696
|
end
|
668
697
|
code << %{end }
|
669
|
-
module_eval code
|
698
|
+
module_eval code.join("\n")
|
670
699
|
end
|
671
700
|
|
672
701
|
def self.print_highlighted(prefix, line, matches)
|
@@ -755,7 +784,8 @@ File finding:
|
|
755
784
|
|
756
785
|
File inclusion/exclusion:
|
757
786
|
-n No descending into subdirectories
|
758
|
-
-g REGEX Only search in
|
787
|
+
-g REGEX Only search in files matching REGEX.
|
788
|
+
-k REGEX Only search in files not matching REGEX.
|
759
789
|
-a, --all All files, regardless of extension (but still skips
|
760
790
|
blib, pkg, CVS, _darcs, .git, .pc, RCS, SCCS and .svn dirs)
|
761
791
|
--ruby Include only Ruby files.
|
data/lib/rak.rb
CHANGED
data/spec/rak_spec.rb
CHANGED
@@ -158,14 +158,10 @@ Cap
|
|
158
158
|
END
|
159
159
|
end
|
160
160
|
|
161
|
-
|
162
161
|
it "-c prints only the number of matches found per file" do
|
163
162
|
t=<<END
|
164
|
-
quux.py:0
|
165
163
|
dir1/bar.rb:2
|
166
164
|
foo.rb:2
|
167
|
-
shebang:0
|
168
|
-
Rakefile:0
|
169
165
|
END
|
170
166
|
sort_lines(strip_ansi(%x{rak Pik -c})).should == sort_lines(t)
|
171
167
|
end
|
@@ -447,12 +443,23 @@ foo.rb
|
|
447
443
|
|
448
444
|
END
|
449
445
|
end
|
446
|
+
|
450
447
|
it "-g REGEX only searches in files matching REGEX" do
|
451
448
|
asterize_ansi(%x{rak Pikon -g f.o}).should == t=<<END
|
452
449
|
*foo.rb*
|
453
450
|
6|foo foo foo foo foo *Pikon* foo foo
|
454
451
|
8|foo *Pikon* foo foo foo foo foo foo
|
455
452
|
|
453
|
+
END
|
454
|
+
|
455
|
+
end
|
456
|
+
|
457
|
+
it "-k REGEX only searches in files not matching REGEX" do
|
458
|
+
asterize_ansi(%x{rak Pikon -k f.o}).should == t=<<END
|
459
|
+
*dir1/bar.rb*
|
460
|
+
2|bar bar bar bar *Pikon* bar
|
461
|
+
9|bar bar *Pikon* bar bar bar
|
462
|
+
|
456
463
|
END
|
457
464
|
end
|
458
465
|
|
metadata
CHANGED
@@ -1,33 +1,49 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4
|
3
|
-
specification_version: 1
|
4
2
|
name: rak
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: "0
|
7
|
-
date: 2008-02-03 00:00:00 +00:00
|
8
|
-
summary: A grep replacement in Ruby, type "$rak pattern".
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: dan@fluentradical.com
|
12
|
-
homepage: " by Daniel Lucraft"
|
13
|
-
rubyforge_project: rak
|
14
|
-
description: "Based on the Perl tool 'ack' by Andy Lester. Examples with similar grep: $ rak pattern $ grep pattern $(find . | grep -v .svn) $ rak --ruby pattern $ grep pattern $(find . -name '*.rb' | grep -v .svn) == FEATURES/PROBLEMS: * Ruby regular expression syntax (uses oniguruma gem if installed). * Highlighted output. * Automatically recurses down the current directory or any given directories. * Skips version control directories, backups like '~' and '#' and your * ruby project's pkg directory. * Allows inclusion and exclusion of files based on types. * Many options similar to grep."
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: "1.0"
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Daniel Lucraft
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-09-27 00:00:00 +01:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: hoe
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 2.3.3
|
24
|
+
version:
|
25
|
+
description: |-
|
26
|
+
Replacement for grep. Recursively scans directories to match a given
|
27
|
+
Ruby regular expression. Prints highlighted results.
|
28
|
+
|
29
|
+
Based on the Perl tool 'ack' by Andy Lester.
|
30
|
+
|
31
|
+
Examples with similar grep:
|
32
|
+
|
33
|
+
$ rak pattern
|
34
|
+
$ grep pattern $(find . | grep -v .svn)
|
35
|
+
|
36
|
+
$ rak --ruby pattern
|
37
|
+
$ grep pattern $(find . -name '*.rb' | grep -v .svn)
|
38
|
+
email: dan@fluentradical.com
|
39
|
+
executables:
|
40
|
+
- rak
|
41
|
+
extensions: []
|
42
|
+
|
43
|
+
extra_rdoc_files:
|
44
|
+
- History.txt
|
45
|
+
- Manifest.txt
|
46
|
+
- README.txt
|
31
47
|
files:
|
32
48
|
- History.txt
|
33
49
|
- Manifest.txt
|
@@ -37,28 +53,34 @@ files:
|
|
37
53
|
- lib/rak.rb
|
38
54
|
- spec/rak_spec.rb
|
39
55
|
- spec/help_spec.rb
|
40
|
-
|
56
|
+
has_rdoc: true
|
57
|
+
homepage: http://rubyforge.org/projects/rak
|
58
|
+
licenses: []
|
41
59
|
|
60
|
+
post_install_message:
|
42
61
|
rdoc_options:
|
43
62
|
- --main
|
44
63
|
- README.txt
|
45
|
-
|
46
|
-
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
-
|
51
|
-
|
52
|
-
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: "0"
|
71
|
+
version:
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: "0"
|
77
|
+
version:
|
53
78
|
requirements: []
|
54
79
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: 1.4.0
|
64
|
-
version:
|
80
|
+
rubyforge_project: rak
|
81
|
+
rubygems_version: 1.3.4
|
82
|
+
signing_key:
|
83
|
+
specification_version: 3
|
84
|
+
summary: A grep replacement in Ruby, type "$rak pattern".
|
85
|
+
test_files: []
|
86
|
+
|