22
33require "json"
44require "colorize"
5+ require "pry-byebug"
56require_relative "./codeclimate_wrapper"
67require_relative "./result_printer"
78require_relative "./issue_sorter"
@@ -12,9 +13,27 @@ class Runner
1213 def self . calculate_changed_filenames ( pattern )
1314 extra_grep_filter = pattern ? " | grep '#{ pattern } '" : ""
1415 branch_name = CodeclimateDiff . configuration [ "main_branch_name" ] || "main"
15- files_changed_str = `git diff --name-only #{ branch_name } | grep --invert-match spec/ | grep --extended-regexp '.js$|.rb$'#{ extra_grep_filter } `
16- files_changed_str . split ( "\n " )
17- . filter { |filename | File . exist? ( filename ) }
16+ all_files_changed_str = `git diff --name-only #{ branch_name } | grep --extended-regexp '.js$|.rb$'#{ extra_grep_filter } `
17+ all_files_changed = all_files_changed_str . split ( "\n " )
18+ . filter { |filename | File . exist? ( filename ) }
19+
20+ # load the exclude patterns list from .codeclimate.yml
21+ exclude_patterns = [ ]
22+ if File . exist? ( ".codeclimate.yml" )
23+ config = YAML . load_file ( ".codeclimate.yml" )
24+ exclude_patterns = config [ "exclude_patterns" ]
25+ end
26+
27+ files_and_directories_excluded = exclude_patterns . map { |exclude_pattern | Dir . glob ( exclude_pattern ) } . flatten
28+
29+ # filter out any files that match the excluded ones
30+ all_files_changed . filter do |filename |
31+ next if files_and_directories_excluded . include? filename
32+
33+ next if files_and_directories_excluded . any? { |excluded_filename | filename . start_with? ( excluded_filename ) }
34+
35+ true
36+ end
1837 end
1938
2039 def self . calculate_issues_in_changed_files ( changed_filenames , always_analyze_all_files )
@@ -36,8 +55,6 @@ def self.calculate_issues_in_changed_files(changed_filenames, always_analyze_all
3655
3756 else
3857 changed_filenames . each do |filename |
39- next if filename == "codeclimate_diff.rb" # TODO: fix this file's code quality issues when we make a Gem!
40-
4158 puts "Analysing '#{ filename } '..."
4259 result = CodeclimateWrapper . new . run_codeclimate ( filename )
4360 JSON . parse ( result ) . each do |issue |
0 commit comments