punchlist 1.3.0 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.circleci/config.yml +132 -0
- data/.envrc +4 -0
- data/.git-hooks/pre_commit/circle_ci.rb +25 -0
- data/.git-hooks/pre_commit/punchlist.rb +51 -0
- data/.git-hooks/pre_commit/solargraph_typecheck.rb +64 -0
- data/.gitattributes +6 -0
- data/.gitignore +60 -0
- data/.markdownlint_style.rb +3 -0
- data/.mdlrc +1 -0
- data/.overcommit.yml +87 -0
- data/.pronto.yml +2 -0
- data/.rubocop.yml +148 -0
- data/.solargraph.yml +26 -0
- data/.yamllint.yml +8 -0
- data/CODE_OF_CONDUCT.md +133 -0
- data/CONTRIBUTING.rst +75 -0
- data/ChangeLog.md +8 -0
- data/DEVELOPMENT.md +31 -0
- data/Gemfile +26 -0
- data/Gemfile.lock +186 -0
- data/LICENSE +22 -0
- data/Makefile +104 -0
- data/README.md +27 -0
- data/Rakefile +2 -49
- data/bin/bump +29 -0
- data/bin/overcommit +29 -0
- data/bin/rake +29 -0
- data/bin/rubocop +27 -0
- data/bin/solargraph +27 -0
- data/bin/yard +27 -0
- data/config/env.1p +0 -0
- data/docs/.gitignore +3 -0
- data/docs/cookiecutter_input.json +16 -0
- data/feature/expected/mixed_types_of_source_files_results.txt +2 -0
- data/feature/expected/no_files_results.txt +0 -0
- data/feature/expected/non_source_file_with_pis_results.txt +0 -0
- data/feature/expected/one_source_file_with_cis_results.txt +1 -0
- data/feature/expected/scala_file_to_be_ignored_results.txt +1 -0
- data/feature/expected/source_file_with_no_items_results.txt +0 -0
- data/feature/feature_helper.rb +41 -0
- data/feature/pronto_punchlist_use_spec.rb +26 -0
- data/feature/punchlist_cli_spec.rb +63 -0
- data/feature/samples/mixed_types_of_source_files/lib/bar.scala +1 -0
- data/feature/samples/mixed_types_of_source_files/lib/foo.rb +4 -0
- data/feature/samples/no_files/.ignore +0 -0
- data/feature/samples/non_source_file_with_pis/foo.doc +5 -0
- data/feature/samples/one_source_file_with_cis/app/foo.rb +4 -0
- data/feature/samples/scala_file_to_be_ignored/lib/bar.scala +1 -0
- data/feature/samples/scala_file_to_be_ignored/lib/foo.rb +4 -0
- data/feature/samples/source_file_with_no_items/foo.rb +3 -0
- data/fix.sh +411 -0
- data/lib/punchlist/inspector.rb +27 -7
- data/lib/punchlist/version.rb +1 -1
- data/lib/punchlist.rb +1 -0
- data/metrics/brakeman_high_water_mark +1 -0
- data/metrics/flake8_high_water_mark +1 -0
- data/metrics/jscs_high_water_mark +1 -0
- data/metrics/punchlist_high_water_mark +1 -0
- data/metrics/pycodestyle_high_water_mark +1 -0
- data/metrics/rails_best_practices_high_water_mark +1 -0
- data/metrics/scalastyle_high_water_mark +1 -0
- data/metrics/shellcheck_high_water_mark +1 -0
- data/package.json +9 -0
- data/punchlist.gemspec +25 -31
- data/rakelib/citest.rake +4 -0
- data/rakelib/clear_metrics.rake +9 -0
- data/rakelib/console.rake +6 -0
- data/rakelib/default.rake +4 -0
- data/rakelib/doc.rake +6 -0
- data/rakelib/feature.rake +10 -0
- data/rakelib/gem_tasks.rake +3 -0
- data/rakelib/localtest.rake +4 -0
- data/rakelib/overcommit.rake +6 -0
- data/rakelib/quality.rake +4 -0
- data/rakelib/repl.rake +4 -0
- data/rakelib/spec.rake +9 -0
- data/rakelib/undercover.rake +8 -0
- data/requirements_dev.txt +2 -0
- metadata +88 -115
- data/License.txt +0 -20
data/bin/bump
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'bump' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
require "pathname"
|
12
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
+
Pathname.new(__FILE__).realpath)
|
14
|
+
|
15
|
+
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
+
|
17
|
+
if File.file?(bundle_binstub)
|
18
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
+
load(bundle_binstub)
|
20
|
+
else
|
21
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
require "rubygems"
|
27
|
+
require "bundler/setup"
|
28
|
+
|
29
|
+
load Gem.bin_path("bump", "bump")
|
data/bin/overcommit
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'overcommit' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
require "pathname"
|
12
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
+
Pathname.new(__FILE__).realpath)
|
14
|
+
|
15
|
+
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
+
|
17
|
+
if File.file?(bundle_binstub)
|
18
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
+
load(bundle_binstub)
|
20
|
+
else
|
21
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
require "rubygems"
|
27
|
+
require "bundler/setup"
|
28
|
+
|
29
|
+
load Gem.bin_path("overcommit", "overcommit")
|
data/bin/rake
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'rake' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
require "pathname"
|
12
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
+
Pathname.new(__FILE__).realpath)
|
14
|
+
|
15
|
+
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
+
|
17
|
+
if File.file?(bundle_binstub)
|
18
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
+
load(bundle_binstub)
|
20
|
+
else
|
21
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
require "rubygems"
|
27
|
+
require "bundler/setup"
|
28
|
+
|
29
|
+
load Gem.bin_path("rake", "rake")
|
data/bin/rubocop
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'rubocop' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
|
12
|
+
|
13
|
+
bundle_binstub = File.expand_path("bundle", __dir__)
|
14
|
+
|
15
|
+
if File.file?(bundle_binstub)
|
16
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
17
|
+
load(bundle_binstub)
|
18
|
+
else
|
19
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
20
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
require "rubygems"
|
25
|
+
require "bundler/setup"
|
26
|
+
|
27
|
+
load Gem.bin_path("rubocop", "rubocop")
|
data/bin/solargraph
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'solargraph' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
|
12
|
+
|
13
|
+
bundle_binstub = File.expand_path("bundle", __dir__)
|
14
|
+
|
15
|
+
if File.file?(bundle_binstub)
|
16
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
17
|
+
load(bundle_binstub)
|
18
|
+
else
|
19
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
20
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
require "rubygems"
|
25
|
+
require "bundler/setup"
|
26
|
+
|
27
|
+
load Gem.bin_path("solargraph", "solargraph")
|
data/bin/yard
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'yard' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
|
12
|
+
|
13
|
+
bundle_binstub = File.expand_path("bundle", __dir__)
|
14
|
+
|
15
|
+
if File.file?(bundle_binstub)
|
16
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
17
|
+
load(bundle_binstub)
|
18
|
+
else
|
19
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
20
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
require "rubygems"
|
25
|
+
require "bundler/setup"
|
26
|
+
|
27
|
+
load Gem.bin_path("yard", "yard")
|
data/config/env.1p
ADDED
File without changes
|
data/docs/.gitignore
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
{
|
2
|
+
"_checkout": null,
|
3
|
+
"_output_dir": "/Users/broz/src/punchlist/.git/cookiecutter",
|
4
|
+
"_repo_dir": "/Users/broz/src/cookiecutter-gem",
|
5
|
+
"_template": "https://github.com/apiology/cookiecutter-gem",
|
6
|
+
"email": "vince@broz.cc",
|
7
|
+
"full_name": "Vince Broz",
|
8
|
+
"github_username": "apiology",
|
9
|
+
"module_name": "Punchlist",
|
10
|
+
"open_source_license": "MIT license",
|
11
|
+
"project_name": "Punchlist",
|
12
|
+
"project_short_description": "Counts the number of 'todo' comments in your code",
|
13
|
+
"project_slug": "punchlist",
|
14
|
+
"type_of_github_repo": "public",
|
15
|
+
"version": "1.3.6"
|
16
|
+
}
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
app/foo.rb:4: puts 'foo' # XXX: change to bar
|
@@ -0,0 +1 @@
|
|
1
|
+
lib/foo.rb:3: # XXX: need to frob the lub
|
File without changes
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'open3'
|
4
|
+
require 'punchlist'
|
5
|
+
require 'rspec'
|
6
|
+
|
7
|
+
# Add the bin directory, to allow testing of gem executables as if the gem is
|
8
|
+
# already installed.
|
9
|
+
root_dir = RSpec::Core::RubyProject.root
|
10
|
+
exec_dir = File.join(File::SEPARATOR, root_dir, 'bin')
|
11
|
+
# @sg-ignore
|
12
|
+
ENV['PATH'] = [exec_dir, ENV.fetch('PATH')].join(File::PATH_SEPARATOR)
|
13
|
+
|
14
|
+
# Courtesy of:
|
15
|
+
# https://raw.github.com/cupakromer/tao-of-tdd/master/adder/spec/support/
|
16
|
+
# capture_exec.rb
|
17
|
+
|
18
|
+
# @sg-ignore
|
19
|
+
# @param cmd [Array<String>]
|
20
|
+
# @return [String]
|
21
|
+
def exec_io(*cmd)
|
22
|
+
cmd = cmd.flatten
|
23
|
+
# @sg-ignore
|
24
|
+
all_out, _exit_code = Open3.capture2e(*cmd)
|
25
|
+
|
26
|
+
all_out
|
27
|
+
end
|
28
|
+
|
29
|
+
RSpec.configure do |config|
|
30
|
+
config.run_all_when_everything_filtered = true
|
31
|
+
config.order = 'random'
|
32
|
+
config.alias_it_should_behave_like_to :has_behavior
|
33
|
+
config.alias_it_should_behave_like_to :it_has_behavior, 'has behavior:'
|
34
|
+
end
|
35
|
+
|
36
|
+
def let_double(*doubles)
|
37
|
+
doubles.each do |double_sym|
|
38
|
+
# @sg-ignore
|
39
|
+
let(double_sym) { double(double_sym.to_s) }
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'punchlist'
|
5
|
+
require 'punchlist/offense'
|
6
|
+
|
7
|
+
# Example use from https://github.com/apiology/pronto-punchlist
|
8
|
+
|
9
|
+
describe Punchlist do
|
10
|
+
subject(:offenses) do
|
11
|
+
::Punchlist::Inspector.new(punchlist_line_regexp, path).run
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:punchlist_line_regexp) do
|
15
|
+
Regexp.new(::Punchlist::Config.default_punchlist_line_regexp_string)
|
16
|
+
end
|
17
|
+
let(:path) { 'feature/samples/mixed_types_of_source_files/lib/bar.scala' }
|
18
|
+
|
19
|
+
it 'stays compatible with use by pronto-spec' do
|
20
|
+
expect(offenses.length).to eq(1)
|
21
|
+
offenses.each do |offense|
|
22
|
+
expect(offense.filename).to eq(path)
|
23
|
+
expect(offense.line_num).to eq(1)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'feature_helper'
|
4
|
+
require 'punchlist'
|
5
|
+
|
6
|
+
describe Punchlist do
|
7
|
+
# "pis" are "punchlist items"
|
8
|
+
|
9
|
+
%w[mixed_types_of_source_files
|
10
|
+
one_source_file_with_cis
|
11
|
+
no_files
|
12
|
+
source_file_with_no_items
|
13
|
+
non_source_file_with_pis].each do |type|
|
14
|
+
it "handles #{type} case" do
|
15
|
+
expect(exec_io("cd feature/samples/#{type} &&" \
|
16
|
+
'RUBYLIB=`pwd`/../../lib:"$RUBYLIB" punchlist'))
|
17
|
+
.to eq(IO.read("feature/expected/#{type}_results.txt"))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
%w[scala_file_to_be_ignored].each do |type|
|
22
|
+
it "handles #{type} case with a special glob" do
|
23
|
+
expect(exec_io("cd feature/samples/#{type} &&" \
|
24
|
+
'RUBYLIB=`pwd`/../../lib:"$RUBYLIB" ' \
|
25
|
+
"punchlist --glob '{app,lib,test,spec,feature}/**/*." \
|
26
|
+
"{rb,swift,cpp,c,java,py}'"))
|
27
|
+
.to eq(IO.read("feature/expected/#{type}_results.txt"))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
let(:expected_usage) do
|
32
|
+
"Usage: punchlist [options]\n"\
|
33
|
+
' -g, --glob glob here ' \
|
34
|
+
'Which files to parse - default is ' \
|
35
|
+
'{Dockerfile,Rakefile,{*,.*}.{c,clj,cljs,cpp,gemspec,groovy,html,java,' \
|
36
|
+
'js,json,py,rake,rb,scala,sh,swift,yml},{app,config,db,feature,lib,spec,' \
|
37
|
+
'src,test,tests,vars,www}/**/{*,.*}.{c,clj,cljs,cpp,gemspec,groovy,html,' \
|
38
|
+
'java,js,json,py,rake,rb,scala,sh,swift,yml}}' \
|
39
|
+
"\n" \
|
40
|
+
' -e, --exclude-glob glob here ' \
|
41
|
+
"Files to exclude - default is none\n" \
|
42
|
+
' -r, --regexp r ' \
|
43
|
+
'Regexp to trigger upon - default is ' \
|
44
|
+
"XXX|TODO|FIXME|OPTIMIZE|HACK|REVIEW|LATER|FIXIT\n"
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'starts up with short help argument' do
|
48
|
+
expect(exec_io('punchlist -h'))
|
49
|
+
.to eq(expected_usage)
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'starts up with long help argument' do
|
53
|
+
expect(exec_io('punchlist --help'))
|
54
|
+
.to eq(expected_usage)
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'starts up with invalid argument' do
|
58
|
+
expect(exec_io('punchlist --blah'))
|
59
|
+
.to match(/invalid option/)
|
60
|
+
end
|
61
|
+
|
62
|
+
xit 'handles passing in different annotation comments'
|
63
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
println('something') // TODO: mix styles
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
println('something') // TODO: mix styles
|