Class: PuppetLint::Checks

Inherits:
Object
  • Object
show all
Defined in:
lib/puppet-lint/checks.rb

Overview

Internal: Various methods that orchestrate the actions of the puppet-lint check plugins.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeChecks

Public: Initialise a new PuppetLint::Checks object.


10
11
12
# File 'lib/puppet-lint/checks.rb', line 10

def initialize
  @problems = []
end

Instance Attribute Details

#problemsObject

Public: Get an Array of problem Hashes.


7
8
9
# File 'lib/puppet-lint/checks.rb', line 7

def problems
  @problems
end

Instance Method Details

#enabled_checksObject

Internal: Get a list of checks that have not been disabled.

Returns an Array of String check names.


77
78
79
80
81
82
83
# File 'lib/puppet-lint/checks.rb', line 77

def enabled_checks
  @enabled_checks ||= Proc.new do
    PuppetLint.configuration.checks.select { |check|
      PuppetLint.configuration.send("#{check}_enabled?")
    }
  end.call
end

#load_data(path, content) ⇒ Object

Internal: Tokenise the manifest code and prepare it for checking.

path - The path to the file as passed to puppet-lint as a String. content - The String manifest code to be checked.

Returns nothing.


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/puppet-lint/checks.rb', line 20

def load_data(path, content)
  lexer = PuppetLint::Lexer.new
  PuppetLint::Data.path = path
  PuppetLint::Data.manifest_lines = content.split("\n", -1)
  begin
    PuppetLint::Data.tokens = lexer.tokenise(content)
    PuppetLint::Data.parse_control_comments
  rescue PuppetLint::LexerError => e
    problems << {
      :kind     => :error,
      :check    => :syntax,
      :message  => 'Syntax error (try running `puppet parser validate <file>`)',
      :line     => e.line_no,
      :column   => e.column,
      :fullpath => PuppetLint::Data.fullpath,
      :path     => PuppetLint::Data.path,
      :filename => PuppetLint::Data.filename,
    }
    PuppetLint::Data.tokens = []
  end
end

#manifestObject

Internal: Render the fixed manifest.

Returns the manifest as a String.


88
89
90
# File 'lib/puppet-lint/checks.rb', line 88

def manifest
  PuppetLint::Data.tokens.map { |t| t.to_manifest }.join('')
end

#run(fileinfo, data) ⇒ Object

Internal: Run the lint checks over the manifest code.

fileinfo - A Hash containing the following:

:fullpath - The expanded path to the file as a String.
:filename - The name of the file as a String.
:path     - The original path to the file as passed to puppet-lint as
            a String.

data - The String manifest code to be checked.

Returns an Array of problem Hashes.


52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/puppet-lint/checks.rb', line 52

def run(fileinfo, data)
  load_data(fileinfo, data)

  checks_run = []
  enabled_checks.each do |check|
    klass = PuppetLint.configuration.check_object[check].new
    problems = klass.run

    if PuppetLint.configuration.fix
      checks_run << klass
    else
      @problems.concat(problems)
    end
  end

  checks_run.each do |check|
    @problems.concat(check.fix_problems)
  end

  @problems
end