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!


Intigrated Development Environment

Hi Guys,
I'm looking to Implement the integrated Development environment using progress Openedge Architect (Common environment to develop test and deploy).
Im puzzle on how to do this. Anybody have Idea to how to achieve this.


Unexpected token proc-status

Receiving error "... unexpected token proc-status ... rule proparse" when linting a file containing a temp-table with a field named "PROC-STATUS".

The keyword forget-list for the session is set up with PROC-STATUS.

The file compiles successfully with a straight compile from the editor.

How do I get past this? Unfortunately removing PROC-STATUS from the definition is not an option.


Prolint tables and fields in round table

We are using prolint within round table.
I was wondering if anyone had done something to lint tables and fields (instead of source code) and have created any rules for this. (Using the roundtable info for validation)

Regards,
Focco van der Vegt
Red Bee Media (UK)


Progress DB access via VM

Hi,

I'm using Progress 10.1c in Linux(ubuntu 10.04) which runs on a Windows machine via VM. The databases are running in Linux as local databases i.e. without specifying any port numbers. How can I access the DB's running on Linux from Windows.
Is i possible at all?

Regards,
Akshay


Prolint with Proparse.Net

I have completed the work necessary to get Prolint running with Proparse.Net. You will find downloads and instructions at http://www.joanju.com/proparse/.

This means that, on Windows, you will be able to run Prolint against 10.2 ABL syntax.

It also means that any new development done on Prolint can take advantage of direct access to Proparse's classes and objects, just like you can with other .Net assemblies.


ABBREVKWD: false positive on field names assigned using :: shortcut

Issue

When using the :: shortcut for hb:BUFFER-FIELD("language":U):BUFFER-VALUE, hb::language the ABBREVKWD rule complains that language is an abbreviated keyword for LANGUAGES.

Test case


DEFINE TEMP-TABLE tt NO-UNDO
FIELD language AS CHARACTER.

DEFINE VARIABLE hb AS HANDLE NO-UNDO.

hb = TEMP-TABLE tt:DEFAULT-BUFFER-HANDLE.
hb:BUFFER-CREATE().
hb::language = "nl":U.


NOUNDO: false positive on dataset-handles

Fix:

Add to inspectnode prolint/rules/noundo.p:

WHEN "DATASETHANDLE":U THEN IF vartype='parameter':U THEN
/* suppress warning on "DEFINE .. parameter dataset-handle ..." */
ASSIGN havevar = FALSE.


How to install Prolint?

Hi all!


nohardcodeemail.p bug?

If hard coded email is found in an include file, this rule shows the original procedure as source.
E.g. if I have procedure proc.p which is

/* proc.p body */
/* ... some code */
{inc.i}
/* ... some code */

hard coded email is in inc.i

Though proLint will show me that source is proc.p, not inc.i. The line will be the correct line in inc.i

Attached is a changed rule, which seems to work fine.

Yuri


The Prolint project is seeking a volunteer for ABL + (.Net or Java) programming!

UPDATE:

This work has been completed!

Original post:

Project goal: Quickly get Prolint working with Proparse.Net, so that Prolint can work with 10.2 syntax.

Required skills: ABL, and *either* .Net (C# preferred) or Java.

Project scope: Relatively small and certainly has a fixed scope. You will know when you are done...


Varusage.SkipNewShared not implemented correctly

In the query using the SkipNewShared it is used in the wrong way, resulting in wrong results when SkipNewShared is no.
The code:

tt_object.newshared <> SkipNewShared

should be changed to:

(not tt_object.newshared or not SkipNewShared)


do1.StatementSkipList

A while ago we implented the StatementSkipList for rule do1.
I suggest we add BLOCK_LABEL to the default-list. Otherwise a DO without label is skipped, but one with label gives a warning.

run SetProlintProperty ("rules.do1.StatementSkipList", "CASE,DO,FOR,IF,REPEAT,BLOCK_LABEL").


Check if propsuper is running

Logwin8.w => save log as => tabfile.p gives an error about dynamic function ProlintProperty.
This is because Prolint does: RUN DecrementProlintPropertySubscribers. which tells propsuper to shutdown (if no-one is actively listening)

tabfile.p (responsible for the call) or Logwin8.w (responsible for the button)
should check if propsuper is running with a construction like in core/prolint.p


rule tablename false positives when forward function decl. <> function decl

This was resolved on issue 1403, but the find "prototype" should be find FIRST "prototype" on line 394.


rule message gives warning on hide message

One could perhaps argue that "hide message" may never be necessary when you never use "message" in the first place, but I think a lot of "own implementations" of messages result in the progress-message to be used.
So I adjusted the rule to skip "hide message" (statehead=HIDE).

Niek

P.S.
In this rule IgnoreAb is also implemented in a way I think won't work or I don't understand.


#
Syndicate content