pointme 1.0.0 → 1.0.1
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.
- data/CHANGELOG.md +9 -1
- data/README.md +13 -1
- data/lib/pointme/cli.rb +53 -53
- data/lib/pointme/look.rb +85 -85
- data/lib/pointme/version.rb +8 -8
- data/lib/pointme.rb +4 -4
- metadata +1 -1
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -37,11 +37,23 @@ Pointme can handle several language comments like:
|
|
37
37
|
+ ; TODO: content
|
38
38
|
+ <!-- TODO: content -->
|
39
39
|
|
40
|
+
## Supported MIME types
|
41
|
+
|
42
|
+
+ text/plain
|
43
|
+
+ text/x-ruby
|
44
|
+
+ text/x-python
|
45
|
+
+ text/x-c
|
46
|
+
+ text/x-c++
|
47
|
+
+ text/x-shellscript
|
48
|
+
+ text/x-java
|
49
|
+
+ text/x-php
|
50
|
+
+ text/html
|
51
|
+
|
40
52
|
## Dependencies
|
41
53
|
|
42
54
|
+ ruby (working just great on 1.9.2, haven't tried it on other versions yet)
|
43
55
|
+ rubygems (the newest the better [for sure works under 1.8.5])
|
44
|
-
+ a UNIX
|
56
|
+
+ a UNIX tools called `cat` and `file` (but you have them, right?)
|
45
57
|
|
46
58
|
## Beware, beware! A bug!
|
47
59
|
|
data/lib/pointme/cli.rb
CHANGED
@@ -1,36 +1,36 @@
|
|
1
1
|
require "trollop"
|
2
2
|
|
3
3
|
module Pointme
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
4
|
+
|
5
|
+
# Command Line Interface class
|
6
|
+
#
|
7
|
+
# === Usage
|
8
|
+
#
|
9
|
+
# module Pointme
|
10
|
+
# Cli.new.run!
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# or
|
14
|
+
#
|
15
|
+
# Pointme::Cli.new.run!
|
16
|
+
#
|
17
|
+
# === Exit statuses
|
18
|
+
#
|
19
|
+
# - *0* Everything went just fine :)
|
20
|
+
# - *1* User said ^C :]
|
21
|
+
# - *2* User wanted to look for UnknownToken
|
22
|
+
#
|
23
|
+
class Cli
|
24
|
+
|
25
|
+
# run! the Cli!
|
26
|
+
def run!
|
27
|
+
|
28
|
+
# Nice, cool 'n' AWESOME --options parsing with Trollop[http://trollop.rubyforge.org/]!
|
29
|
+
#
|
30
|
+
# @return [Hash] array full of options
|
31
|
+
$opts = Trollop::options do
|
32
|
+
version "pointme version #{Version::STRING}"
|
33
|
+
banner <<-EOB
|
34
34
|
usage: pointme <token> [options]
|
35
35
|
|
36
36
|
tokens are:
|
@@ -40,30 +40,30 @@ tokens are:
|
|
40
40
|
options are:
|
41
41
|
EOB
|
42
42
|
# TODO: Looking in directories with no recursion.
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
43
|
+
# opt :no_recurse, "don't look in directories recursively"
|
44
|
+
opt :in, "specify where to look for", :default => Dir.pwd
|
45
|
+
opt :version, "show version and exit"
|
46
|
+
opt :help, "show help and exit"
|
47
|
+
end
|
48
|
+
|
49
|
+
# Let's see what to look for
|
50
|
+
token = ARGV.shift.downcase
|
51
51
|
unless token == "todos" || token == "fixmes"
|
52
52
|
raise Look::UnknownToken, "Unknown token: '#{token}'"
|
53
53
|
end
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
54
|
+
# Let's see where to look for
|
55
|
+
where = $opts[:in] || Dir.pwd
|
56
|
+
|
57
|
+
begin
|
58
|
+
Look.for_the token, where
|
59
|
+
exit 0
|
60
|
+
rescue Interrupt
|
61
|
+
puts "\n\n!# interrupted"
|
62
|
+
exit 1
|
63
|
+
rescue Look::UnknownToken => e
|
64
|
+
puts e.message
|
65
|
+
exit 2
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
69
|
end
|
data/lib/pointme/look.rb
CHANGED
@@ -1,91 +1,91 @@
|
|
1
1
|
require "find"
|
2
2
|
|
3
3
|
module Pointme
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
4
|
+
module Look
|
5
|
+
|
6
|
+
# Kinda self explanatory
|
7
|
+
class UnknownToken < RuntimeError; end
|
8
|
+
|
9
|
+
# @files holds all the specified files that Look should search in.
|
10
|
+
# @lines keeps all the found TODO, FIXME and so-on lines.
|
11
|
+
attr_accessor :files, :lines
|
12
|
+
|
13
|
+
def self.get_file_list
|
14
|
+
@where.split(":").each do |e|
|
15
15
|
if e == '.' then e = Dir.pwd end
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
24
|
-
else
|
25
|
-
ext = File.extname(path)[1..-1]
|
26
|
-
# TODO: Make it look in files with proper MIME type not extension.
|
27
|
-
# Don't look into files with that extensions
|
28
|
-
unless (ext == "class" ||
|
29
|
-
ext == "jar"
|
30
|
-
ext == "rar"
|
31
|
-
ext == "bz"
|
32
|
-
ext == "bz2"
|
33
|
-
ext == "gz"
|
34
|
-
ext == "tgz"
|
35
|
-
ext == "zip")
|
36
|
-
@files << path
|
16
|
+
@dirs << e unless @dirs.include? e
|
17
|
+
Find.find(e) do |path|
|
18
|
+
if File.directory? path
|
19
|
+
if File.basename(path)[0] == ?.
|
20
|
+
Find.prune # don't look any further into this directory.
|
21
|
+
else
|
22
|
+
next
|
37
23
|
end
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
24
|
+
else
|
25
|
+
mime = `file --mime -b #{path}`.chomp!.split(";")[0]
|
26
|
+
# Get into files only with that MIME types.
|
27
|
+
if (mime == "text/plain" ||
|
28
|
+
mime == "text/x-ruby" ||
|
29
|
+
mime == "text/x-python" ||
|
30
|
+
mime == "text/x-c" ||
|
31
|
+
mime == "text/x-c++" ||
|
32
|
+
mime == "text/x-shellscript" ||
|
33
|
+
mime == "text/x-java" ||
|
34
|
+
mime == "text/x-php" ||
|
35
|
+
mime == "text/html")
|
36
|
+
@files << path
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.search_for_tokens
|
44
|
+
@files.each do |file|
|
45
|
+
@lines[file] = []
|
46
|
+
`cat -n #{file}`.split("\n").each do |line|
|
47
|
+
if /\s*(?<n>[0-9]+)\s+(.*)?(#|\/\/|;|<!--)\s(?<token>TODO|FIXME):?\s(?<content>.*)(-->)?/ =~ line
|
48
|
+
@lines[file] << [n, token, content] if @token == token
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
if @lines[file].empty?
|
53
|
+
@lines.delete file
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.print_output
|
59
|
+
if @lines.empty?
|
60
|
+
puts "[pointme] there are no #{@token}s in a specified path/s"
|
61
|
+
else
|
62
|
+
@lines.each do |e|
|
63
|
+
name = nil
|
64
|
+
if @dirs.size == 1
|
65
|
+
name = e[0].sub @where, ""
|
66
|
+
else
|
67
|
+
name = e[0]
|
68
|
+
end
|
69
|
+
puts "\e[1;34m" + name + ":\e[0;0m"
|
70
|
+
e[1].each do |i|
|
71
|
+
@count += 1
|
72
|
+
puts " at \e[1;32m#{i[0]}\e[0;0m: #{i[1]} -> #{i[2]}"
|
73
|
+
end
|
74
|
+
puts
|
75
|
+
end
|
76
|
+
puts "\n \e[1;33mtotal:\e[0;0m #{@count}\n\n"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.for_the token, where
|
81
|
+
@files = []
|
82
|
+
@lines = {}
|
83
|
+
@token = token.upcase[0..-2]
|
84
|
+
@where = where
|
85
|
+
@count = 0
|
86
|
+
@dirs = []
|
87
|
+
|
88
|
+
get_file_list and search_for_tokens and print_output
|
89
|
+
end
|
90
|
+
end
|
91
91
|
end
|
data/lib/pointme/version.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
module Pointme
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
2
|
+
module Version
|
3
|
+
MAJOR = 1
|
4
|
+
MINOR = 0
|
5
|
+
PATCH = 1
|
6
|
+
BUILD = nil
|
7
|
+
|
8
|
+
STRING = [MAJOR, MINOR, PATCH, BUILD]. compact.join "."
|
9
|
+
end
|
10
10
|
end
|
data/lib/pointme.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Pointme
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
ROOT = File.expand_path(File.dirname(__FILE__))
|
3
|
+
|
4
|
+
autoload :Look, "#{ROOT}/pointme/look"
|
5
|
+
autoload :Version, "#{ROOT}/pointme/version"
|
6
6
|
end
|