Class: Puppet::SyntaxCheckers::PP
- Inherits:
-
Plugins::SyntaxCheckers::SyntaxChecker
- Object
- Plugins::SyntaxCheckers::SyntaxChecker
- Puppet::SyntaxCheckers::PP
- Defined in:
- lib/puppet/syntax_checkers/pp.rb
Instance Method Summary collapse
-
#check(text, syntax, acceptor, source_pos) ⇒ Object
Checks the text for Puppet Language syntax issues and reports them to the given acceptor.
Instance Method Details
#check(text, syntax, acceptor, source_pos) ⇒ Object
Checks the text for Puppet Language syntax issues and reports them to the given acceptor.
Error messages from the checker are capped at 100 chars from the source text.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/puppet/syntax_checkers/pp.rb', line 17 def check(text, syntax, acceptor, source_pos) raise ArgumentError, _("PP syntax checker: the text to check must be a String.") unless text.is_a?(String) raise ArgumentError, _("PP syntax checker: the syntax identifier must be a String, e.g. pp") unless syntax == 'pp' raise ArgumentError, _("PP syntax checker: invalid Acceptor, got: '%{klass}'.") % { klass: acceptor.class.name } unless acceptor.is_a?(Puppet::Pops::Validation::Acceptor) begin Puppet::Pops::Parser::EvaluatingParser.singleton.parse_string(text) rescue => e # Cap the message to 100 chars and replace newlines msg = _("PP syntax checker: \"%{message}\"") % { message: e.().slice(0, 500).gsub(/\r?\n/, "\\n") } # TODO: improve the pops API to allow simpler diagnostic creation while still maintaining capabilities # and the issue code. (In this case especially, where there is only a single error message being issued). # issue = Puppet::Pops::Issues.issue(:ILLEGAL_PP) { msg } acceptor.accept(Puppet::Pops::Validation::Diagnostic.new(:error, issue, source_pos.file, source_pos, {})) end end |