gtdlint 0.4 → 0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (7) hide show
  1. checksums.yaml +4 -4
  2. data/CONFIGURE.md +2 -2
  3. data/README.md +29 -27
  4. data/bin/gtdlint +23 -96
  5. data/lib/gtdlint.rb +60 -36
  6. data/lib/version.rb +1 -1
  7. metadata +17 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cada247b35c61d890089ff9557e0df8073612ea4
4
- data.tar.gz: 83c4334f89ac04731677ea98e791960bb007a2db
3
+ metadata.gz: 315a65dffec87f52addba4616dd267d1ed0eec9a
4
+ data.tar.gz: 58ba330a56b9ef105ff5d4c59d7cd37d0de308a5
5
5
  SHA512:
6
- metadata.gz: 27dea8891fbb54eb265e2c41a366d1837e5bf087f78cc9490585a4bb5504e7db9009b7243a474d499b98aa6401c2319e2557ec1f2e7c9c4131b39859af3b1881
7
- data.tar.gz: b34885f1e759d559a9ace2b5bb8dddda5cecb8400004e01bed5896b155cdd89f652f18a3e2f2ac808765f7b63fbb45b17affa0d1c64f5935c5a2953e15fd4fe6
6
+ metadata.gz: de669820eb48d62cdd820cc3ba25407f880552c821f43fb1b8b2888ca7fcd9949d07d06a64e2428797cb880883b773f6555a3fb38f10bb87f9d3789523ad81ef
7
+ data.tar.gz: 2eb9621f4f823809d21d173c96b274df3a55eabecf13e4d0efa526e60646e70c821eb4434c34e2a06d36b64248c4c5551982b04c3a1dae5590dc7db56b8675b2
@@ -15,7 +15,7 @@ Run `gtdlint -h` or `gtdlint --help` for a full list, or refer to the source cod
15
15
  ```
16
16
  $ bin/gtdlint -h
17
17
  Usage: gtdlint [options] [<files>|-]
18
- -i, --ignore pattern Ignore file names matching Ruby regex pattern
18
+ -i, --ignore pattern Ignore file pattern (fnmatch)
19
19
  -p, --gtd-pattern pattern Custom GTD pattern
20
20
  -h, --help Print usage info
21
21
  -v, --version Print version info
@@ -47,6 +47,6 @@ Samples:
47
47
 
48
48
  # Built-in defaults
49
49
 
50
- * `gtd_pattern`: `"\'todo\\|to do\\|to-do\\|pending\\|hack\'"`.
50
+ * `gtd_pattern`: `"\'todo\\|to do\\|to-do\\|pending\\|hack\\|fixme\'"`.
51
51
  * `before_lines`: `0`
52
52
  * `after_lines`: `0`
data/README.md CHANGED
@@ -1,29 +1,6 @@
1
1
  # gtdlint - search for TO-DO items to complete in large projects
2
2
 
3
- # HOMEPAGE
4
-
5
- https://github.com/mcandre/gtdlint
6
-
7
- # RUBYGEMS
8
-
9
- https://rubygems.org/gems/gtdlint
10
-
11
- # ABOUT
12
-
13
- Gtdlint is a command line program for finding TODO tasks in a project, such as `// TODO` code comments. By default, gtdlint is case-insensitve, and looks for:
14
-
15
- * `todo`
16
- * `pending`
17
- * `hack`
18
-
19
- gtdlint can be customized with a `-p` command line flag and/or a `.gtdlintrc.yml` configuration file. For example, gtdlint can be configured to look for `pte`/`hack` in Spanish projects.
20
-
21
- gtdlint is a shell wrapper around the traditional GNU [grep](http://www.gnu.org/software/grep/) backend, presenting a frontend similar to modern linters like [Reek](https://github.com/troessner/reek/wiki) and [JSHint](http://jshint.com/).
22
-
23
- * Recursive file search by default
24
- * Optional ignore patterns
25
- * Configuration via per-project and per-user [dotfiles](https://github.com/mcandre/gtdlint/blob/master/CONFIGURE.md#dotfiles)
26
- * Install via a standard programming language package manager
3
+ `gtdlint` searches your projects for code comments indicating TODOs, FIXMEs, and other changes that need to be made.
27
4
 
28
5
  # EXAMPLES
29
6
 
@@ -41,7 +18,7 @@ stdin:1:// TODO: Add copyright
41
18
  stdin:6: // TODO: Add proper line ending
42
19
  stdin:9: putc(10, stdout); // hack
43
20
 
44
- $ gtdlint -i '\.gitignore' '\.c' examples/
21
+ $ gtdlint -i .gitignore '*.c' examples/
45
22
  examples/spanish/phrases.txt:1:PTE: Agregar más frases.
46
23
  examples/spec/int_spec.rb:3: pending('mathematical revolution')
47
24
 
@@ -50,7 +27,7 @@ examples/spanish/phrases.txt:1:PTE: Agregar más frases.
50
27
 
51
28
  $ gtdlint -h
52
29
  Usage: gtdlint [options] [<files>|-]
53
- -i, --ignore pattern Ignore file names matching Ruby regex pattern
30
+ -i, --ignore pattern Ignore file pattern (fnmatch)
54
31
  -p, --gtd-pattern pattern Custom GTD pattern
55
32
  -B, --lines-before n Also show n lines before matching line
56
33
  -A, --lines-after n Also show n lines after matching line
@@ -64,9 +41,34 @@ gtdlint can be combined with other programs. For example, check your most recent
64
41
  $ git diff HEAD~1 | gtdlint
65
42
  ```
66
43
 
44
+ # HOMEPAGE
45
+
46
+ https://github.com/mcandre/gtdlint
47
+
48
+ # RUBYGEMS
49
+
50
+ https://rubygems.org/gems/gtdlint
51
+
52
+ # ABOUT
53
+
54
+ Gtdlint is a command line program for finding TODO tasks in a project, such as `// TODO` code comments. By default, gtdlint is case-insensitve, and looks for:
55
+
56
+ * `todo`
57
+ * `pending`
58
+ * `hack`
59
+
60
+ gtdlint can be customized with a `-p` command line flag and/or a `.gtdlintrc.yml` configuration file. For example, gtdlint can be configured to look for `pte`/`hack` in Spanish projects.
61
+
62
+ gtdlint is a shell wrapper around the traditional GNU [grep](http://www.gnu.org/software/grep/) backend, presenting a frontend similar to modern linters like [Reek](https://github.com/troessner/reek/wiki) and [JSHint](http://jshint.com/).
63
+
64
+ * Recursive file scanning, like `jshint .`
65
+ * Optional ignore patterns, like `.gitignore`
66
+ * Configuration via per-project and per-user [dotfiles](https://github.com/mcandre/gtdlint/blob/master/CONFIGURE.md#dotfiles)
67
+ * Install via a standard programming language package manager
68
+
67
69
  # REQUIREMENTS
68
70
 
69
- * [Ruby](https://www.ruby-lang.org/) 2+
71
+ * [Ruby](https://www.ruby-lang.org/) 2.0+
70
72
  * [grep](http://www.gnu.org/software/grep/) (often built-in, or provided by [git](http://git-scm.com/))
71
73
 
72
74
  E.g., Windows users can `chocolatey install git`.
@@ -3,23 +3,19 @@
3
3
  require 'rubygems'
4
4
  require 'find'
5
5
  require 'optparse'
6
+ require 'dotsmack'
6
7
  require 'yaml'
7
8
  require 'gtdlint'
8
9
 
9
- IGNORE_FILENAME = '.gtdlintignore'
10
- CONFIGURATION_FILENAME = '.gtdlintrc.yml'
11
-
12
10
  def main
13
11
  ignores = DEFAULT_IGNORES
14
12
 
15
- filenames = ['-']
16
-
17
13
  configuration_flags = {}
18
14
 
19
15
  option = OptionParser.new do |option|
20
16
  option.banner = "Usage: gtdlint [options] [<files>|-]"
21
17
 
22
- option.on('-i', '--ignore pattern', 'Ignore file names matching Ruby regex pattern') do |pattern|
18
+ option.on('-i', '--ignore pattern', 'Ignore file pattern (fnmatch)') do |pattern|
23
19
  ignores << pattern
24
20
  end
25
21
 
@@ -27,11 +23,11 @@ def main
27
23
  configuration_flags["gtd_pattern"] = pattern
28
24
  end
29
25
 
30
- option.on('-B', '--lines-before n', 'Also show n lines before matching line') do |n|
26
+ option.on('-B', '--lines-before=n', 'Also show n lines before matching line') do |n|
31
27
  configuration_flags["lines_before"] = n.to_i
32
28
  end
33
29
 
34
- option.on('-A', '--lines-after n', 'Also show n lines after matching line') do |n|
30
+ option.on('-A', '--lines-after=n', 'Also show n lines after matching line') do |n|
35
31
  configuration_flags["lines_after"] = n.to_i
36
32
  end
37
33
 
@@ -48,100 +44,31 @@ def main
48
44
 
49
45
  option.parse!
50
46
 
51
- filenames = ARGV unless ARGV.empty?
52
-
53
- if filenames.empty? || filenames == ['-'] then
54
- configuration_dotfile = DEFAULT_CONFIGURATION
55
-
56
- pwd = Dir.pwd
57
-
58
- dir = pwd
59
-
60
- parent_of_home = File.expand_path("..", ENV["HOME"])
61
-
62
- while dir != parent_of_home
63
- ignore_file = dir + File::SEPARATOR + IGNORE_FILENAME
64
-
65
- if File.exist?(ignore_file) then
66
- ignores.concat(open(ignore_file).read.split("\n"))
67
- end
68
-
69
- dir = File.expand_path("..", dir)
47
+ filenames =
48
+ if ARGV == []
49
+ ['-']
50
+ else
51
+ ARGV
70
52
  end
71
53
 
72
- if ignores.none? { |ignore| pwd =~ %r(#{ignore}) } then
73
- dir = Dir.pwd
74
-
75
- parent_of_home = File.expand_path("..", ENV["HOME"])
76
-
77
- while dir != parent_of_home
78
- config_file = dir + File::SEPARATOR + CONFIGURATION_FILENAME
79
-
80
- if File.exist?(config_file) then
81
- configuration_dotfile = DEFAULT_CONFIGURATION.merge(YAML.load_file(config_file))
82
- break
83
- else
84
- dir = File.expand_path("..", dir)
85
- end
86
- end
87
-
88
- # Command line flags override dotfile settings
89
- configuration = configuration_dotfile.merge(configuration_flags)
90
-
91
- check_stdin(configuration)
92
- end
93
- else
94
- recursive_filenames = []
54
+ dotsmack = Dotsmack::Smacker.new(
55
+ dotignore = '.gtdlintignore',
56
+ additional_ignores = ignores,
57
+ dotconfig = '.gtdlintrc.yml'
58
+ )
95
59
 
96
- filenames.each do |f|
97
- if File.directory? f
98
- recursive_filenames = recursive_filenames.concat(recursive_list(f, ignores))
60
+ dotsmack.enumerate(filenames).each do |filename, config|
61
+ config =
62
+ if config.nil?
63
+ DEFAULT_CONFIGURATION.merge(configuration_flags)
99
64
  else
100
- recursive_filenames << f
101
- end
102
- end
103
-
104
- configuration_dotfile = DEFAULT_CONFIGURATION
105
-
106
- recursive_filenames.each do |f|
107
- dir = File.expand_path("..", f)
108
-
109
- parent_of_home = File.expand_path("..", ENV["HOME"])
110
-
111
- while dir != parent_of_home
112
- ignore_file = dir + File::SEPARATOR + IGNORE_FILENAME
113
-
114
- if File.exist?(ignore_file) then
115
- ignores.concat(open(ignore_file).read.split("\n"))
116
- end
117
-
118
- dir = File.expand_path("..", dir)
65
+ YAML.load(config).merge(DEFAULT_CONFIGURATION).merge(configuration_flags)
119
66
  end
120
67
 
121
- if ignores.none? { |ignore| f =~ %r(#{ignore}) } then
122
- dir = File.expand_path("..", f)
123
-
124
- parent_of_home = File.expand_path("..", ENV["HOME"])
125
-
126
- while dir != parent_of_home
127
- config_file = dir + File::SEPARATOR + CONFIGURATION_FILENAME
128
-
129
- if File.exist?(config_file) then
130
- configuration_dotfile = DEFAULT_CONFIGURATION.merge(YAML.load_file(config_file))
131
- break
132
- else
133
- dir = File.expand_path("..", dir)
134
- end
135
- end
136
-
137
- # Hack to Reset configuration when changing directories
138
- configuration_dotfile = DEFAULT_CONFIGURATION unless File.exist?(dir + File::SEPARATOR + CONFIGURATION_FILENAME)
139
-
140
- # Command line flags override dotfile settings
141
- configuration = configuration_dotfile.merge(configuration_flags)
142
-
143
- check(f, configuration)
144
- end
68
+ if filename == '-'
69
+ check_stdin(config)
70
+ else
71
+ check(filename, config)
145
72
  end
146
73
  end
147
74
  end
@@ -1,34 +1,57 @@
1
- require 'rubygems'
2
1
  require 'ptools'
3
2
  require 'tempfile'
4
3
 
5
- $stdout.sync = true
6
-
7
- require 'version'
4
+ require_relative 'version'
8
5
 
9
6
  DEFAULT_IGNORES = %w(
10
- \.hg/
11
- \.svn/
12
- \.git/
13
- \.gtdlintignore
14
- \.gtdlintrc\.yml
15
- node_modules/
16
- \.vagrant/
7
+ tmp
8
+ .hg
9
+ .svn
10
+ .git
11
+ .gtdlintignore
12
+ .gtdlintrc.yml
13
+ node_modules
14
+ bower_components
15
+ target
16
+ dist
17
+ .vagrant
17
18
  Gemfile.lock
18
- \.exe
19
- \.bin
20
- \.png
21
- \.gif
22
- \.jpg
23
- \.jpeg
24
- \.tiff
25
- \.svg
26
- \.min.js
27
- -min\.js
19
+ *.exe
20
+ *.bin
21
+ *.apk
22
+ *.ap_
23
+ res
24
+ *.class
25
+ *.zip
26
+ *.jar
27
+ *.war
28
+ *.xpi
29
+ *.dmg
30
+ *.pkg
31
+ *.app
32
+ *.xcodeproj
33
+ *.lproj
34
+ *.xcassets
35
+ *.pmdoc
36
+ *.dSYM
37
+ *.jad
38
+ *.cmo
39
+ *.cmi
40
+ *.png
41
+ *.gif
42
+ *.jpg
43
+ *.jpeg
44
+ *.tiff
45
+ *.ico
46
+ *.svg
47
+ *.dot
48
+ *.wav
49
+ *.mp3
50
+ *[.-]min.*
28
51
  )
29
52
 
30
53
  # Grep format, case insensitive
31
- DEFAULT_GTD_PATTERN = "\'todo\\|to do\\|to-do\\|pending\\|hack\'"
54
+ DEFAULT_GTD_PATTERN = "\'todo\\|to do\\|to-do\\|pending\\|hack\\|fixme\'"
32
55
 
33
56
  DEFAULT_LINES_BEFORE = 0
34
57
  DEFAULT_LINES_AFTER = 0
@@ -69,27 +92,21 @@ class GTDThing
69
92
  end
70
93
  end
71
94
 
72
- def self.recursive_list(directory, ignores = DEFAULT_IGNORES)
73
- Find.find(directory).reject do |f|
74
- File.directory?(f) ||
75
- ignores.any? { |ignore| f =~ /#{ignore}/ } ||
76
-
77
- begin
78
- File.binary?(f)
79
- rescue Errno::ENOENT
80
- true
95
+ def self.check_stdin(configuration = nil)
96
+ configuration =
97
+ if configuration.nil?
98
+ DEFAULT_CONFIGURATION
99
+ else
100
+ configuration
81
101
  end
82
- end
83
- end
84
102
 
85
- def self.check_stdin(configuration = DEFAULT_CONFIGURATION)
86
103
  gtd_pattern = configuration['gtd_pattern']
87
104
  lines_before = configuration['lines_before']
88
105
  lines_after = configuration['lines_after']
89
106
 
90
107
  contents = $stdin.read
91
108
 
92
- t = Tempfile.new('aspelllint')
109
+ t = Tempfile.new('gtdlint')
93
110
  t.write(contents)
94
111
  t.close
95
112
 
@@ -111,7 +128,14 @@ def self.check_stdin(configuration = DEFAULT_CONFIGURATION)
111
128
  gtd_things.each { |m| puts m }
112
129
  end
113
130
 
114
- def self.check(filename, configuration = DEFAULT_CONFIGURATION)
131
+ def self.check(filename, configuration = nil)
132
+ configuration =
133
+ if configuration.nil?
134
+ DEFAULT_CONFIGURATION
135
+ else
136
+ configuration
137
+ end
138
+
115
139
  gtd_pattern = configuration['gtd_pattern']
116
140
  lines_before = configuration['lines_before']
117
141
  lines_after = configuration['lines_after']
@@ -2,5 +2,5 @@
2
2
  # GTDLint
3
3
  #
4
4
  module GTDLint
5
- VERSION = '0.4'
5
+ VERSION = '0.5'
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gtdlint
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.4'
4
+ version: '0.5'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Pennebaker
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: dotsmack
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '0.3'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '0.3'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -244,7 +258,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
244
258
  requirements:
245
259
  - - '>='
246
260
  - !ruby/object:Gem::Version
247
- version: '0'
261
+ version: '2.0'
248
262
  required_rubygems_version: !ruby/object:Gem::Requirement
249
263
  requirements:
250
264
  - - '>='
@@ -252,7 +266,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
252
266
  version: '0'
253
267
  requirements: []
254
268
  rubyforge_project:
255
- rubygems_version: 2.2.2
269
+ rubygems_version: 2.4.6
256
270
  signing_key:
257
271
  specification_version: 4
258
272
  summary: search for TO-DO items to complete in large projects