gtdlint 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.
- checksums.yaml +7 -0
- data/CONFIGURE.md +52 -0
- data/README.md +111 -0
- data/bin/gtdlint +161 -0
- data/lib/gtdlint.rb +118 -0
- data/lib/version.rb +6 -0
- metadata +259 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3fbc233bec15bdb84f7e239addc236f4b2d0c650
|
4
|
+
data.tar.gz: 655b4888df40991b13c6dc8d9c167a60ea81cfa7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9ca071200dbd35abeba32ce17e6782ab261120d1e4054829e32d9b7e0afc81212c544c067e3d0146bfc32c7652b30bd84d843ebb3924add872e3b676ec50a3ec
|
7
|
+
data.tar.gz: 1b4868f8db94818b0dbc73c4dde2a7a028b093d03d2d6dbd03e74d8e5efa9d697db62680402b49b489bb88b37b06fdcea4cc9a62eed28695376517fedbc2946a
|
data/CONFIGURE.md
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# Configuration
|
2
|
+
|
3
|
+
Gtdlint offers multiple ways to resolve preferences:
|
4
|
+
|
5
|
+
1. Command-line flags (`gtdlint -i`, `gtdlint -p`)
|
6
|
+
2. Dotfiles (`.gtdlintignore`, `.gtdlintrc.yml`)
|
7
|
+
3. Built-in defaults (`DEFAULT_IGNORES`, `DEFAULT_GTD_PATTERN`)
|
8
|
+
|
9
|
+
Any command-line flags that are present override the same settings in dotfiles and built-in defaults.
|
10
|
+
|
11
|
+
# Command-line flags
|
12
|
+
|
13
|
+
Run `gtdlint -h` or `gtdlint --help` for a full list, or refer to the source code for `bin/gtdlint`.
|
14
|
+
|
15
|
+
```
|
16
|
+
$ bin/gtdlint -h
|
17
|
+
Usage: gtdlint [options] [<files>|-]
|
18
|
+
-i, --ignore pattern Ignore file names matching Ruby regex pattern
|
19
|
+
-p, --gtd-pattern pattern Custom GTD pattern
|
20
|
+
-h, --help Print usage info
|
21
|
+
-v, --version Print version info
|
22
|
+
```
|
23
|
+
|
24
|
+
# Dotfiles
|
25
|
+
|
26
|
+
Gtdlint automatically applies any `.gtdlintignore` and/or `.gtdlintrc.yml` configuration files in the same directory as a file being scanned, or a parent directory (`../.gtdlintignore`, `../.gtdlintrc.yml`), up to `$HOME/.gtdlintignore`, `$HOME/.gtdlintrc.yml`, if any such files exist.
|
27
|
+
|
28
|
+
## `.gtdlintignore`
|
29
|
+
|
30
|
+
Samples:
|
31
|
+
|
32
|
+
* [examples/.gtdlintignore](https://github.com/mcandre/gtdlint/blob/master/examples/.gtdlintignore)
|
33
|
+
|
34
|
+
A `.gtdlintignore` may contain Ruby regex patterns of files and/or folders to exclude from scanning, one pattern per line.
|
35
|
+
|
36
|
+
## `.gtdlintrc.yml`
|
37
|
+
|
38
|
+
Samples:
|
39
|
+
|
40
|
+
* [spanish/.gtdlintrc.yml](https://github.com/mcandre/gtdlint/blob/master/examples/spanish/.gtdlintrc.yml)
|
41
|
+
|
42
|
+
`.gtdlintrc.yml` may contain a number of keys:
|
43
|
+
|
44
|
+
* `gtd_pattern` is a shell-quoted string for a `grep` pattern.
|
45
|
+
* `before_lines` is an optional integer for showing n lines before each matching line.
|
46
|
+
* `after_lines` is an optional integer for showing n lines after each matching line.
|
47
|
+
|
48
|
+
# Built-in defaults
|
49
|
+
|
50
|
+
* `gtd_pattern`: `"\'todo\\|to do\\|to-do\\|hack\'"`.
|
51
|
+
* `before_lines`: `0`
|
52
|
+
* `after_lines`: `0`
|
data/README.md
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
# gtdlint - search for TO-DO items to complete in large projects
|
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
|
+
* `to do`
|
17
|
+
* `to-do`
|
18
|
+
* `TODO`
|
19
|
+
* `TO DO`
|
20
|
+
* `TO-DO`
|
21
|
+
* `ToDo`
|
22
|
+
* `To Do`
|
23
|
+
* `To-Do`
|
24
|
+
* `hack`
|
25
|
+
* `Hack`
|
26
|
+
* `HACK`
|
27
|
+
* ...
|
28
|
+
|
29
|
+
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.
|
30
|
+
|
31
|
+
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/).
|
32
|
+
|
33
|
+
* Recursive file search by default
|
34
|
+
* Optional ignore patterns
|
35
|
+
* Configuration via per-project and per-user [dotfiles](https://github.com/mcandre/gtdlint/blob/master/CONFIGURE.md#dotfiles)
|
36
|
+
* Install via a standard programming language package manager
|
37
|
+
|
38
|
+
# EXAMPLES
|
39
|
+
|
40
|
+
```
|
41
|
+
$ gtdlint examples/
|
42
|
+
examples/hello.c:1:// TODO: Add copyright
|
43
|
+
examples/hello.c:6: // TODO: Add proper line ending
|
44
|
+
examples/hello.c:9: putc(10, stdout); // hack
|
45
|
+
examples/spanish/phrases.txt:1:PTE: Agregar más frases.
|
46
|
+
|
47
|
+
$ cat examples/hello.c | bin/gtdlint
|
48
|
+
stdin:1:// TODO: Add copyright
|
49
|
+
stdin:6: // TODO: Add proper line ending
|
50
|
+
stdin:9: putc(10, stdout); // hack
|
51
|
+
|
52
|
+
$ gtdlint -i .c examples/
|
53
|
+
examples/spanish/phrases.txt:1:PTE: Agregar más frases.
|
54
|
+
|
55
|
+
$ gtdlint -p pte examples/spanish/
|
56
|
+
examples/spanish/phrases.txt:1:PTE: Agregar más frases.
|
57
|
+
|
58
|
+
$ gtdlint -h
|
59
|
+
Usage: gtdlint [options] [<files>|-]
|
60
|
+
-i, --ignore pattern Ignore file names matching Ruby regex pattern
|
61
|
+
-p, --gtd-pattern pattern Custom GTD pattern
|
62
|
+
-B, --lines-before n Also show n lines before matching line
|
63
|
+
-A, --lines-after n Also show n lines after matching line
|
64
|
+
-h, --help Print usage info
|
65
|
+
-v, --version Print version info
|
66
|
+
```
|
67
|
+
|
68
|
+
# REQUIREMENTS
|
69
|
+
|
70
|
+
* [Ruby](https://www.ruby-lang.org/) 2+
|
71
|
+
* [grep](http://www.gnu.org/software/grep/) (often built-in, or provided by [git](http://git-scm.com/))
|
72
|
+
|
73
|
+
E.g., Windows users can `chocolatey install git`.
|
74
|
+
|
75
|
+
# INSTALL
|
76
|
+
|
77
|
+
Install via [RubyGems](http://rubygems.org/):
|
78
|
+
|
79
|
+
```
|
80
|
+
$ gem install gtdlint
|
81
|
+
```
|
82
|
+
|
83
|
+
# CONFIGURE
|
84
|
+
|
85
|
+
See [CONFIGURE.md](https://github.com/mcandre/gtdlint/blob/master/CONFIGURE.md) for details.
|
86
|
+
|
87
|
+
# LICENSE
|
88
|
+
|
89
|
+
FreeBSD
|
90
|
+
|
91
|
+
# DEVELOPMENT
|
92
|
+
|
93
|
+
## Testing
|
94
|
+
|
95
|
+
Keep the interface working:
|
96
|
+
|
97
|
+
```
|
98
|
+
$ cucumber
|
99
|
+
```
|
100
|
+
|
101
|
+
## Linting
|
102
|
+
|
103
|
+
Keep the code tidy:
|
104
|
+
|
105
|
+
```
|
106
|
+
$ rake lint
|
107
|
+
```
|
108
|
+
|
109
|
+
## Git Hooks
|
110
|
+
|
111
|
+
See `hooks/`.
|
data/bin/gtdlint
ADDED
@@ -0,0 +1,161 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'find'
|
5
|
+
require 'optparse'
|
6
|
+
require 'yaml'
|
7
|
+
require 'gtdlint'
|
8
|
+
|
9
|
+
IGNORE_FILENAME = '.gtdlintignore'
|
10
|
+
CONFIGURATION_FILENAME = '.gtdlintrc.yml'
|
11
|
+
|
12
|
+
def main
|
13
|
+
ignores = DEFAULT_IGNORES
|
14
|
+
|
15
|
+
filenames = ['-']
|
16
|
+
|
17
|
+
configuration_flags = {}
|
18
|
+
|
19
|
+
option = OptionParser.new do |option|
|
20
|
+
option.banner = "Usage: gtdlint [options] [<files>|-]"
|
21
|
+
|
22
|
+
option.on('-i', '--ignore pattern', 'Ignore file names matching Ruby regex pattern') do |pattern|
|
23
|
+
ignores << pattern
|
24
|
+
end
|
25
|
+
|
26
|
+
option.on('-p', '--gtd-pattern pattern', 'Custom GTD pattern') do |pattern|
|
27
|
+
configuration_flags["gtd_pattern"] = pattern
|
28
|
+
end
|
29
|
+
|
30
|
+
option.on('-B', '--lines-before n', 'Also show n lines before matching line') do |n|
|
31
|
+
configuration_flags["lines_before"] = n.to_i
|
32
|
+
end
|
33
|
+
|
34
|
+
option.on('-A', '--lines-after n', 'Also show n lines after matching line') do |n|
|
35
|
+
configuration_flags["lines_after"] = n.to_i
|
36
|
+
end
|
37
|
+
|
38
|
+
option.on('-h', '--help', 'Print usage info') do
|
39
|
+
puts option
|
40
|
+
exit
|
41
|
+
end
|
42
|
+
|
43
|
+
option.on('-v', '--version', 'Print version info') do
|
44
|
+
puts "gtdlint #{GTDLint::VERSION}"
|
45
|
+
exit
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
option.parse!
|
50
|
+
|
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)
|
70
|
+
end
|
71
|
+
|
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 = []
|
95
|
+
|
96
|
+
filenames.each do |f|
|
97
|
+
if File.directory? f
|
98
|
+
recursive_filenames = recursive_filenames.concat(recursive_list(f, ignores))
|
99
|
+
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)
|
119
|
+
end
|
120
|
+
|
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
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
begin
|
150
|
+
main
|
151
|
+
# User may quit before completion.
|
152
|
+
rescue Interrupt
|
153
|
+
nil
|
154
|
+
# Bad regex
|
155
|
+
rescue RegexpError => e
|
156
|
+
puts e
|
157
|
+
# This program may be piped to another program (e.g. `less`),
|
158
|
+
# which is quit before this program completes.
|
159
|
+
rescue Errno::EPIPE, Errno::EMFILE
|
160
|
+
nil
|
161
|
+
end
|
data/lib/gtdlint.rb
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'ptools'
|
3
|
+
require 'tempfile'
|
4
|
+
|
5
|
+
$stdout.sync = true
|
6
|
+
|
7
|
+
require 'version'
|
8
|
+
|
9
|
+
DEFAULT_IGNORES = %w(
|
10
|
+
.hg/
|
11
|
+
.svn/
|
12
|
+
.git/
|
13
|
+
.git
|
14
|
+
.gtdlintignore
|
15
|
+
.gtdlintrc.yml
|
16
|
+
node_modules/
|
17
|
+
.vagrant/
|
18
|
+
Gemfile.lock
|
19
|
+
.exe
|
20
|
+
.bin
|
21
|
+
.png
|
22
|
+
.jpg
|
23
|
+
.jpeg
|
24
|
+
.svg
|
25
|
+
.min.js
|
26
|
+
-min.js
|
27
|
+
)
|
28
|
+
|
29
|
+
# Grep format, case insensitive
|
30
|
+
DEFAULT_GTD_PATTERN = "\'todo\\|to do\\|to-do\\|hack\'"
|
31
|
+
|
32
|
+
DEFAULT_LINES_BEFORE = 0
|
33
|
+
DEFAULT_LINES_AFTER = 0
|
34
|
+
|
35
|
+
DEFAULT_CONFIGURATION = {
|
36
|
+
"gtd_pattern" => DEFAULT_GTD_PATTERN,
|
37
|
+
"lines_before" => DEFAULT_LINES_BEFORE,
|
38
|
+
"lines_after" => DEFAULT_LINES_AFTER
|
39
|
+
}
|
40
|
+
|
41
|
+
#
|
42
|
+
# Parse, model, and print a line too wide for its own good
|
43
|
+
#
|
44
|
+
class GTDThing
|
45
|
+
attr_accessor :filename, :line_number, :line
|
46
|
+
|
47
|
+
def self.parse(filename, grep_line)
|
48
|
+
if grep_line.match(/^--$/) then
|
49
|
+
grep_line
|
50
|
+
else
|
51
|
+
match = grep_line.match(/^([0-9]+)(\:|-)(.*)$/)
|
52
|
+
|
53
|
+
line_number = match[1]
|
54
|
+
line = match[3]
|
55
|
+
|
56
|
+
GTDThing.new(filename, line_number, line)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def initialize(filename, line_number, line)
|
61
|
+
@filename = filename
|
62
|
+
@line_number = line_number
|
63
|
+
@line = line
|
64
|
+
end
|
65
|
+
|
66
|
+
def to_s
|
67
|
+
"#{filename}:#{line_number}:#{line}"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.recursive_list(directory, ignores = DEFAULT_IGNORES)
|
72
|
+
Find.find(directory).reject do |f|
|
73
|
+
File.directory?(f) ||
|
74
|
+
ignores.any? { |ignore| f =~ %r(#{ignore}) } ||
|
75
|
+
|
76
|
+
begin
|
77
|
+
File.binary?(f)
|
78
|
+
rescue Errno::ENOENT
|
79
|
+
true
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def self.check_stdin(configuration = DEFAULT_CONFIGURATION)
|
85
|
+
gtd_pattern = configuration["gtd_pattern"]
|
86
|
+
lines_before = configuration["lines_before"]
|
87
|
+
lines_after = configuration["lines_after"]
|
88
|
+
|
89
|
+
contents = $stdin.read
|
90
|
+
|
91
|
+
t = Tempfile.new('aspelllint')
|
92
|
+
t.write(contents)
|
93
|
+
t.close
|
94
|
+
|
95
|
+
filename = t.path
|
96
|
+
|
97
|
+
output = `grep -B #{lines_before} -A #{lines_after} -n -i #{gtd_pattern} \"#{filename}\"`
|
98
|
+
|
99
|
+
lines = output.split("\n")
|
100
|
+
|
101
|
+
gtd_things = lines.map { |line| GTDThing.parse('stdin', line) }
|
102
|
+
|
103
|
+
gtd_things.each { |m| puts m }
|
104
|
+
end
|
105
|
+
|
106
|
+
def self.check(filename, configuration = DEFAULT_CONFIGURATION)
|
107
|
+
gtd_pattern = configuration["gtd_pattern"]
|
108
|
+
lines_before = configuration["lines_before"]
|
109
|
+
lines_after = configuration["lines_after"]
|
110
|
+
|
111
|
+
output = `grep -B #{lines_before} -A #{lines_after} -n -i #{gtd_pattern} \"#{filename}\"`
|
112
|
+
|
113
|
+
lines = output.split("\n")
|
114
|
+
|
115
|
+
gtd_things = lines.map { |line| GTDThing.parse(filename, line) }
|
116
|
+
|
117
|
+
gtd_things.each { |m| puts m }
|
118
|
+
end
|
data/lib/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,259 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gtdlint
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andrew Pennebaker
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-08-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: ptools
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: reek
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: flay
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.5'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.5'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: flog
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '4.3'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '4.3'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: roodi
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '4.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '4.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: churn
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ~>
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: cane
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '2.6'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ~>
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '2.6'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: excellent
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ~>
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '2.1'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ~>
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '2.1'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rubocop
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ~>
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0.24'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ~>
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0.24'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: tailor
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ~>
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '1.4'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ~>
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '1.4'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: guard
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ~>
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '2.6'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ~>
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '2.6'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: guard-shell
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ~>
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0.6'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ~>
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0.6'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: rspec
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ~>
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '3.0'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ~>
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '3.0'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: cucumber
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ~>
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '1.3'
|
216
|
+
type: :development
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ~>
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '1.3'
|
223
|
+
description: See README.md for example usage
|
224
|
+
email: andrew.pennebaker@gmail.com
|
225
|
+
executables:
|
226
|
+
- gtdlint
|
227
|
+
extensions: []
|
228
|
+
extra_rdoc_files: []
|
229
|
+
files:
|
230
|
+
- CONFIGURE.md
|
231
|
+
- README.md
|
232
|
+
- bin/gtdlint
|
233
|
+
- lib/gtdlint.rb
|
234
|
+
- lib/version.rb
|
235
|
+
homepage: https://github.com/mcandre/gtdlint
|
236
|
+
licenses:
|
237
|
+
- FreeBSD
|
238
|
+
metadata: {}
|
239
|
+
post_install_message:
|
240
|
+
rdoc_options: []
|
241
|
+
require_paths:
|
242
|
+
- lib
|
243
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
244
|
+
requirements:
|
245
|
+
- - '>='
|
246
|
+
- !ruby/object:Gem::Version
|
247
|
+
version: '0'
|
248
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
249
|
+
requirements:
|
250
|
+
- - '>='
|
251
|
+
- !ruby/object:Gem::Version
|
252
|
+
version: '0'
|
253
|
+
requirements: []
|
254
|
+
rubyforge_project:
|
255
|
+
rubygems_version: 2.2.2
|
256
|
+
signing_key:
|
257
|
+
specification_version: 4
|
258
|
+
summary: search for TO-DO items to complete in large projects
|
259
|
+
test_files: []
|