Class: PuppetLint::RakeTask

Inherits:
Rake::TaskLib
  • Object
show all
Includes:
Rake::DSL
Defined in:
lib/puppet-lint/tasks/puppet-lint.rb

Overview

Public: A Rake task that can be loaded and used with everything you need.

Examples

require 'puppet-lint'
PuppetLint::RakeTask.new

Constant Summary collapse

DEFAULT_PATTERN =
'**/*.pp'.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args, &task_block) ⇒ RakeTask

Public: Initialise a new PuppetLint::RakeTask.

args - Not used.

Example

PuppetLint::RakeTask.new

rubocop:disable Lint/MissingSuper



41
42
43
44
45
46
47
48
49
50
# File 'lib/puppet-lint/tasks/puppet-lint.rb', line 41

def initialize(*args, &task_block)
  @name = args.shift || :lint
  @pattern = DEFAULT_PATTERN
  @with_filename = true
  @disable_checks = []
  @only_checks = []
  @ignore_paths = []

  define(args, &task_block)
end

Instance Attribute Details

#disable_checksObject

Returns the value of attribute disable_checks.



23
24
25
# File 'lib/puppet-lint/tasks/puppet-lint.rb', line 23

def disable_checks
  @disable_checks
end

#error_levelObject

Returns the value of attribute error_level.



26
27
28
# File 'lib/puppet-lint/tasks/puppet-lint.rb', line 26

def error_level
  @error_level
end

#fail_on_warningsObject

Returns the value of attribute fail_on_warnings.



25
26
27
# File 'lib/puppet-lint/tasks/puppet-lint.rb', line 25

def fail_on_warnings
  @fail_on_warnings
end

#fixObject

Returns the value of attribute fix.



29
30
31
# File 'lib/puppet-lint/tasks/puppet-lint.rb', line 29

def fix
  @fix
end

#ignore_pathsObject

Returns the value of attribute ignore_paths.



21
22
23
# File 'lib/puppet-lint/tasks/puppet-lint.rb', line 21

def ignore_paths
  @ignore_paths
end

#log_formatObject

Returns the value of attribute log_format.



27
28
29
# File 'lib/puppet-lint/tasks/puppet-lint.rb', line 27

def log_format
  @log_format
end

#nameObject

Returns the value of attribute name.



19
20
21
# File 'lib/puppet-lint/tasks/puppet-lint.rb', line 19

def name
  @name
end

#only_checksObject

Returns the value of attribute only_checks.



24
25
26
# File 'lib/puppet-lint/tasks/puppet-lint.rb', line 24

def only_checks
  @only_checks
end

#patternObject

Returns the value of attribute pattern.



20
21
22
# File 'lib/puppet-lint/tasks/puppet-lint.rb', line 20

def pattern
  @pattern
end

#relativeObject

Returns the value of attribute relative.



31
32
33
# File 'lib/puppet-lint/tasks/puppet-lint.rb', line 31

def relative
  @relative
end

#show_ignoredObject

Returns the value of attribute show_ignored.



30
31
32
# File 'lib/puppet-lint/tasks/puppet-lint.rb', line 30

def show_ignored
  @show_ignored
end

#with_contextObject

Returns the value of attribute with_context.



28
29
30
# File 'lib/puppet-lint/tasks/puppet-lint.rb', line 28

def with_context
  @with_context
end

#with_filenameObject

Returns the value of attribute with_filename.



22
23
24
# File 'lib/puppet-lint/tasks/puppet-lint.rb', line 22

def with_filename
  @with_filename
end

Instance Method Details

#define(args) {|[self, args].slice(0, task_block.arity)| ... } ⇒ Object

Yields:

  • ([self, args].slice(0, task_block.arity))


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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/puppet-lint/tasks/puppet-lint.rb', line 52

def define(args, &task_block)
  desc 'Run puppet-lint'

  yield(*[self, args].slice(0, task_block.arity)) if task_block

  # clear any (auto-)pre-existing task
  Rake::Task[@name].clear if Rake::Task.task_defined?(@name)
  task @name do
    PuppetLint::OptParser.build

    if Array(@only_checks).any?
      enable_checks = Array(@only_checks).map(&:to_sym)
      PuppetLint.configuration.checks.each do |check|
        if enable_checks.include?(check)
          PuppetLint.configuration.send("enable_#{check}")
        else
          PuppetLint.configuration.send("disable_#{check}")
        end
      end
    end

    Array(@disable_checks).each do |check|
      PuppetLint.configuration.send("disable_#{check}")
    end

    ['with_filename', 'fail_on_warnings', 'error_level', 'log_format', 'with_context', 'fix', 'show_ignored', 'relative'].each do |config|
      value = instance_variable_get("@#{config}")
      PuppetLint.configuration.send("#{config}=".to_sym, value) unless value.nil?
    end

    if PuppetLint.configuration.ignore_paths && @ignore_paths.empty?
      @ignore_paths = PuppetLint.configuration.ignore_paths
    end

    if PuppetLint.configuration.pattern
      @pattern = PuppetLint.configuration.pattern
    end

    RakeFileUtils.send(:verbose, true) do
      linter = PuppetLint.new
      matched_files = FileList[@pattern]

      matched_files = matched_files.exclude(*@ignore_paths)

      matched_files.to_a.each do |puppet_file|
        next unless File.file?(puppet_file)
        linter.file = puppet_file
        linter.run
        linter.print_problems

        if PuppetLint.configuration.fix && linter.problems.none? { |e| e[:check] == :syntax }
          IO.write(puppet_file, linter.manifest)
        end
      end
      abort if linter.errors? || (
        linter.warnings? && PuppetLint.configuration.fail_on_warnings
      )
    end
  end
end