@Check
public void checkDoubleQuotedString(DoubleQuotedString o) {
// Check if a verbatim part starting with '-' follows a VariableTE.
// If so, issue configurable issue for the VariableTE
//
TextExpression previous = null;
int idx = 0;
IValidationAdvisor advisor = advisor();
ValidationPreference hyphens = advisor.interpolatedNonBraceEnclosedHyphens();
for(TextExpression te : o.getStringPart()) {
if(idx > 0 && previous instanceof VariableTE && te instanceof VerbatimTE) {
VerbatimTE verbatim = (VerbatimTE) te;
if(verbatim.getText().startsWith("-")) {
if(hyphens.isWarningOrError()) {
warningOrError(
acceptor, hyphens,
"Interpolation continues past '-' in some puppet 2.7 versions", //
o, PPPackage.Literals.DOUBLE_QUOTED_STRING__STRING_PART, idx - 1,
IPPDiagnostics.ISSUE__INTERPOLATED_HYPHEN);
}
}
}
previous = te;
idx++;
}
ValidationPreference booleansInStringForm = advisor.booleansInStringForm();
BOOLEAN_STRING: if(booleansInStringForm.isWarningOrError()) {
// Check if string contains "true" or "false"
String constant = stringConstantEvaluator.doToString(o);
if(constant == null)
break BOOLEAN_STRING;
constant = constant.trim();
if("true".equals(constant) || "false".equals(constant))
warningOrError(
acceptor, booleansInStringForm, "This is not a boolean", o, IPPDiagnostics.ISSUE__STRING_BOOLEAN,
constant);
}
// DQ_STRING_NOT_REQUIRED
ValidationPreference dqStringNotRequired = advisor.dqStringNotRequired();
if(dqStringNotRequired.isWarningOrError() && !hasInterpolation(o)) {
// contains escape sequences?
String constant = stringConstantEvaluator.doToString(o);
if(!constant.contains("\\"))
warningOrError(
acceptor, dqStringNotRequired, "Double quoted string not required", o,
IPPDiagnostics.ISSUE__DQ_STRING_NOT_REQUIRED);
}
// UNBRACED INTERPOLATION
ValidationPreference unbracedInterpolation = advisor.unbracedInterpolation();
if(unbracedInterpolation.isWarningOrError()) {
for(TextExpression te : o.getStringPart()) {
if(te.eClass().getClassifierID() == PPPackage.VARIABLE_TE) {
warningOrError(
acceptor, unbracedInterpolation, "Unbraced interpolation of variable", te,
IPPDiagnostics.ISSUE__UNBRACED_INTERPOLATION);
}
}
}
// SINGLE INTERPOLATION
ValidationPreference dqStringNotRequiredVariable = advisor.dqStringNotRequiredVariable();
SINGLE_INTERPOLATION: if(dqStringNotRequiredVariable.isWarningOrError()) {
if(o.getStringPart().size() == 1) {
String replacement = null;
TextExpression te = o.getStringPart().get(0);
switch(te.eClass().getClassifierID()) {
case PPPackage.VARIABLE_TE:
replacement = ((VariableTE) te).getVarName();
break;
case PPPackage.EXPRESSION_TE:
Expression expr = ((ExpressionTE) te).getExpression();