Skip to content

Commit ece8be7

Browse files
authored
Merge pull request #312 from danielparks/fix_plan_parsing
(#307) Always enable plan parsing
2 parents e7e4444 + f14c95e commit ece8be7

File tree

3 files changed

+46
-12
lines changed

3 files changed

+46
-12
lines changed

lib/puppet-strings/yard/parsers/puppet/parser.rb

+4-6
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,11 @@ def initialize(source, filename) # rubocop:disable Lint/MissingSuper
2424
# @return [void]
2525
def parse
2626
begin
27-
if @file.to_s.match?(%r{^plans|/plans/})
28-
if Puppet::Util::Package.versioncmp(Puppet.version, '5.0.0') < 0
29-
log.warn "Skipping #{@file}: Puppet Plans require Puppet 5 or greater."
30-
return
31-
end
32-
Puppet[:tasks] = true if Puppet.settings.include?(:tasks)
27+
if @file.to_s.match?(%r{^plans|/plans/}) && Puppet::Util::Package.versioncmp(Puppet.version, '5.0.0') < 0
28+
log.warn "Skipping #{@file}: Puppet Plans require Puppet 5 or greater."
29+
return
3330
end
31+
Puppet[:tasks] = true if Puppet.settings.include?(:tasks)
3432
@statements ||= (@visitor.visit(::Puppet::Pops::Parser::Parser.new.parse_string(source)) || []).compact
3533
rescue ::Puppet::ParseError => e
3634
log.error "Failed to parse #{@file}: #{e.message}"

spec/unit/puppet-strings/json_spec.rb

+6-6
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
describe PuppetStrings::Json do
88
before :each do
99
# Populate the YARD registry with both Puppet and Ruby source
10-
YARD::Parser::SourceParser.parse_string(<<-SOURCE, :puppet)
10+
expect(YARD::Parser::SourceParser.parse_string(<<-SOURCE, :puppet).enumerator.length).to eq(2)
1111
# A simple class.
1212
# @todo Do a thing
1313
# @note Some note
@@ -25,7 +25,7 @@ class klass(Integer $param1, $param2, String $param3 = hi) inherits foo::bar {
2525
}
2626
SOURCE
2727

28-
YARD::Parser::SourceParser.parse_string(<<-SOURCE, :puppet) if TEST_PUPPET_PLANS
28+
expect(YARD::Parser::SourceParser.parse_string(<<-SOURCE, :puppet).enumerator.length).to eq(1) if TEST_PUPPET_PLANS
2929
# A simple plan.
3030
# @param param1 First param.
3131
# @param param2 Second param.
@@ -35,7 +35,7 @@ class klass(Integer $param1, $param2, String $param3 = hi) inherits foo::bar {
3535
SOURCE
3636

3737
# Only include Puppet functions for 4.1+
38-
YARD::Parser::SourceParser.parse_string(<<-SOURCE, :puppet) if TEST_PUPPET_FUNCTIONS
38+
expect(YARD::Parser::SourceParser.parse_string(<<-SOURCE, :puppet).enumerator.length).to eq(1) if TEST_PUPPET_FUNCTIONS
3939
# A simple function.
4040
# @param param1 First param.
4141
# @param param2 Second param.
@@ -46,7 +46,7 @@ class klass(Integer $param1, $param2, String $param3 = hi) inherits foo::bar {
4646
SOURCE
4747

4848
# Only include Puppet types for 5.0+
49-
YARD::Parser::SourceParser.parse_string(<<-SOURCE, :ruby) if TEST_PUPPET_DATATYPES
49+
expect(YARD::Parser::SourceParser.parse_string(<<-SOURCE, :ruby).enumerator.length).to eq(1) if TEST_PUPPET_DATATYPES
5050
# Basic Puppet Data Type in Ruby
5151
#
5252
# @param msg A message parameter
@@ -67,7 +67,7 @@ class klass(Integer $param1, $param2, String $param3 = hi) inherits foo::bar {
6767
end
6868
SOURCE
6969

70-
YARD::Parser::SourceParser.parse_string(<<-SOURCE, :json)
70+
expect(YARD::Parser::SourceParser.parse_string(<<-SOURCE, :json).enumerator.length).to eq(1)
7171
{
7272
"description": "Allows you to backup your database to local file.",
7373
"input_method": "stdin",
@@ -92,7 +92,7 @@ class klass(Integer $param1, $param2, String $param3 = hi) inherits foo::bar {
9292
}
9393
SOURCE
9494

95-
YARD::Parser::SourceParser.parse_string(<<-SOURCE, :ruby)
95+
expect(YARD::Parser::SourceParser.parse_string(<<-SOURCE, :ruby).enumerator.length).to eq(6)
9696
Puppet::Parser::Functions.newfunction(:func3x, doc: <<-DOC
9797
An example 3.x function.
9898
@param [String] first The first parameter.

spec/unit/puppet-strings/yard/parsers/puppet/parser_spec.rb

+36
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,42 @@ class bar {
140140
end
141141
end
142142

143+
describe 'parsing puppet plans', if: TEST_PUPPET_PLANS do
144+
# The parsing code actually checks this and sets a global (Puppet[:tasks]).
145+
# Plan parsing will fail if it hasn't yet encountered a file under plans/.
146+
let(:file) { 'plans/test.pp' }
147+
let(:source) { <<~'SOURCE' }
148+
# A simple plan.
149+
# @param param1 First param.
150+
# @param param2 Second param.
151+
# @param param3 Third param.
152+
plan plann(String $param1, $param2, Integer $param3 = 1) {
153+
}
154+
SOURCE
155+
156+
it 'parses the puppet plan statement' do
157+
spec_subject.parse
158+
expect(spec_subject.enumerator.size).to eq(1)
159+
statement = spec_subject.enumerator.first
160+
expect(statement).to be_a(PuppetStrings::Yard::Parsers::Puppet::PlanStatement)
161+
expect(statement.name).to eq('plann')
162+
expect(statement.source).to eq(source.sub(%r{\A.*?\n([^#])}m, '\1').chomp)
163+
expect(statement.file).to eq(file)
164+
expect(statement.line).to eq(5)
165+
expect(statement.docstring).to eq('A simple plan.')
166+
expect(statement.parameters.size).to eq(3)
167+
expect(statement.parameters[0].name).to eq('param1')
168+
expect(statement.parameters[0].type).to eq('String')
169+
expect(statement.parameters[0].value).to be_nil
170+
expect(statement.parameters[1].name).to eq('param2')
171+
expect(statement.parameters[1].type).to be_nil
172+
expect(statement.parameters[1].value).to be_nil
173+
expect(statement.parameters[2].name).to eq('param3')
174+
expect(statement.parameters[2].type).to eq('Integer')
175+
expect(statement.parameters[2].value).to eq('1')
176+
end
177+
end
178+
143179
describe 'parsing puppet functions', if: TEST_PUPPET_FUNCTIONS do
144180
let(:source) do
145181
<<SOURCE

0 commit comments

Comments
 (0)