[Stackoverflow] [Progress OpenEdge ABL] SonarQube OpenEdge custom rule to verify &IF preprocessor with Proparse

Status
Not open for further replies.
R

rubinho.santos

Guest
I am trying to create a custom plugin, based on the Riverside OpenEdge plugin and its version of Proparse to create a rule that valids a &IF preprocessor.

This rule needs to verify if the application is using a deprecated value of a &GLOBAL-DEFINE like this:

/* "A" is the deprecated value of "opts" so I want to create a new ISSUE here */
&IF "{&opts}" = "A" &THEN
MESSAGE "DEPRECATED CODE".
&ENDIF

&IF "{&opts}" > "A" &THEN
MESSAGE "OK CODE".
&ENDIF


For this rule I extended I tried to do something like this:

if (unit.getMacroGraph().macroEventList.stream().noneMatch(macro -> macro instanceof NamedMacroRef
&& ((NamedMacroRef) macro).getMacroDef().getName().equalsIgnoreCase("product_version"))) {
return;
}

TokenSource stream = unit.lex();
ProToken tok = (ProToken) stream.nextToken();

while (tok.getNodeType() != ABLNodeType.EOF_ANTLR4) {
if (tok.getNodeType() == ABLNodeType.AMPIF) {
// Verify node.
System.out.println(tok);
}
}


But I don't know if its the best way to verify (I did based on the code from other sources) and it's not working because the next node comes as an empty "QSSTRING". I am very new in the Proparse world, any help is appreciated.

Continue reading...
 
Status
Not open for further replies.
Top