Prolint

Prolint is a tool for automated source code review of Progress 4GL code. It reads one or more sourcefiles and examines it for bad programming practice
When you are interested Prolint, you are encouraged to subscribe to this group where you find the on-line tools to collaborate and discuss Prolint. There is a discussion forum, you can submit issues (for bugs and enhancement requests), you can modify the on-line documentation. So subscribe, and then don't forget to go to your subscription details to enable the e-mail notification!


Prolint release 73 is available

Prolint release 73 has a couple of bugfixes, a couple of new rules and a new feature.

The new feature is: an easier way to contribute your own custom rules with the world, or to shop for new contributed rules that other people may have uploaded.
Previously you had to send your rule to me, I would commit it to the Subversion version-control repository and people would get it if they wait for a new Prolint release or if they browse Subversion.


streamclose

purpose : examine all named or unnamed streams, defines and usage, and warn if:
1. A stream is defined but not used
2. A stream is opened but not closed
3. A stream is opened for INPUT/OUTPUT but not closed before it's used for OUTPUT/INPUT

Reasons:
1. Obvious, defining something that's not used is useless
2. This will leave you with output on places you don't want it or with system resources not freed.
3. This will probably give you a runtime-error about conflicting use (99).


Forward function declaration <> function declaration

I notice that when the forward declaration of a function states the parameters but the function itself doesn't this gives an error in tablename rule. "field cha_SoortTabel must be qualified with tablename"
Is there a rule which checks this ugly construction and is there a fix for the tablename rule?


No OUTPUT/INPUT CLOSE

If I have:

OUTPUT TO "/v/my-file.dat".

I would like to know I don't have an OUTPUT CLOSE statement. Did I miss this rule?


Lint this c.u. again not compiling again

Prolint.p only compiles the c.u. when it needs Listing and/or Xref.
There is a construction which will or will not enter the compile-loop:
Line 751:

IF NeedListing OR NeedXref THEN compiler-loop: DO compilerLoopNum = 1 TO 2:

but there is also a construction which passes ? (unknown) to the compiler-statement when Listing or Xref is not required.
Line 756:

LISTING VALUE(IF NeedListing THEN listingfile ELSE ?)
XREF VALUE(IF NeedXref THEN xreffile ELSE ?)


file 'checkin-event.p' calls function 'fnRtbGetLintFile' with wrong parameter

In file 'checkin-event.p' are some calls to the function 'fnRtbGetLintFile' in file 'rt_customfunc.p'.
The calls are made with a wrong parameter: The parameter is a "recid" but has to be a "rowid".
I have included a corrected checkin-event.p, see the attachment.


Dynamic Transaction (record write,delete.create)

have two procedures that work that can called from trigger level within trigger. They passed a number of paramters including one temp-table containing create/delete information , the 2nd program accepts the current new record and the old record

WRITE TRIGGER

DEF TEMP-TABLE ttnewCustomer LIKE Customer.
CREATE ttnewcustomer.
BUFFER-COPY customer TO ttnewcustomer.
DEF TEMP-TABLE ttoldCustomer LIKE customer.
CREATE ttoldcustomer.
BUFFER-COPY oldcustomer TO ttoldCustomer.


Results screen is missing the lower half

I have two sessions and one shows the lower half (Compilation Unit, Lint this c.u. again, Help on this rule, etc.). Is there some setting for this? I cannot find anything.


Support for Open Edge 10.1C new keywords

Currently i'm getting a parsing error when using ProLint on code with a new 10.1C keyword (FINALLY). I suppose that other keywords aren't supported either yet. I would like to have these added to the parser.


Rule Help: Check for SVN header

When creating a new program, we need to ensure the SVN header was added before checking the code in. What rule could I look at or copy with slight modifications for this? I noticed a couple of different approaches and I want the one that' most efficient.

Basically, I'm thinking all I need to do is see if SVN is somewhere in a comment at the top of the program.


How To: Varusage and variables only used in &if-statement

I'm trying out the ProParse/ProLint utilities and can't find a solution on how to deal with the following situation:
- use of Varusage to check on defined variables that are never used
- If there are variables that are only used in &if-blocks (and at the moment of the check this &if-statement gives a false result) I will get the message that this variable is defined but never used.
Now in this cases the next step I should do is to delete these unused variables but it is possible that the variable is used if the &if-statement give a positive result (so the variable has to be defined).


Prolint Result messages?

When I run 'Lint Files' I get a few stange messages:
- Expected proparse version 3.1b, found 3.1c02
I've downloaded the latest ProParse and Prolint, why do I get this message??? Can't I use the latest ProLint with the latest ProParse??

- Multiple Lines with '8:50: unexpected token: no-undo'
Whats the reason for this message in Prolint??

Prolint Version 72
ProParse 3.1c02
Progress OpenEdge 10.1A230


RELEASE rule fixed

Attached is a fix to the RELEASE rule. It flagged false positives on RELEASE OBJECT, and now no longer does so.


Prolint 101c

I am scheduled to do some Prolint consulting, starting mid-October. We will be setting up Prolint on a server, where it will monitor file changes and generate reports as a batch-style process.

My hope is that I'll be able to start them off right away using the new proparse.jar rather than the old proparse.dll. This means I'll have to move fast on a new version of Prolint.


Prolint cannot compile from roundtable

I have hooked up Prolint to Roundtable as best I can tell. The lint button appears, and I can click it. When I do, it tries to compile the currently selected object (good). However the compile fails because the propath and databases do not appear to have been set from the current workspace/task. It simply says that compile failed on the program. If I click on compile or compile w/xref buttons from roundtable, the procedure compiles cleanly. What have I missed?


#
Syndicate content