Revision history

prolint release 74, 14 march 2011:
  • Support for Proparse.NET instead of Proparse.DLL. As a result Turbolint.DLL has been removed and Prolint now requires OpenEdge 10.2B and Windows as a minimum
  • Bugfixes by Niek Knijneburg. Thanks Niek!
prolint release 73, 8 Februari 2009:
  • several bugfixes
  • new feature: community-contributed rules in directory "prolint/contribs/rules", as proposed in http://www.oehive.org/node/1150
  • removed rule nopprsininclude, because it is now in "contribs/rules"
  • if a c.u. doesn't compile then prolint will show the compiler messages, with line-numbers
  • rule "do1" may be configured to have a skiplist, that specifies which statements are allowed to appear as only statement in a DO..END block
  • added new rule "streamclose" to check if all streams are closed after use
  • rule "varusage" can be configured to skip shared variables assuming that those variables are probably used in a different c.u.
prolint release 72, 12 April 2008:
  • Added new rule andorparens to find logical expressions with a mix of AND and OR that have no parentheses
  • Fixed every open bug report that was in the issue tracker.
  • Regression tests were out of sync, now they are clean
prolint release 71, 9 march 2008:

Important: if you are upgrading to Prolint 71 and use Roundtable integration, you MUST change rtb_evnts.p to avoid errors. The change only takes a minute and is described at page Repair your Roundtable Integration

New in this release is support for Roundtable 10.1b, created by Thomas Hansen.
The old directory "prolint/rtb" is gone and replaced by a new directory "prolint/roundtable/" + version-number.

Also new are a bunch of rules created by Glen West:

prolint release 70, 2 september 2007:

The optional Prolint database (prolintdb) has undergone many changes. When you were not using prolintdb then it won't be an issue for you, but if you are already using prolintdb then you will have to upgrade its schema, either by creating a new prolintdb database or by importing de delta-df in file "prolint/prolintdb/prolintdb-v1-delta.df".

  • "session-aware prolintdb", by Glen West
  • new rule leavemodal by Tim Townsend
  • new rule where-cando by Tim Townsend
  • various other code improvements by Tim Townsend, see issues 907,914,915,925
prolint release 68 and release 69, 29 april 2007:

More OOABL syntax recognition and one new rule. To use Prolint with OO classes you must have Proparse 3.1a.

  • new rule usingpkg discourages the USING statement with package globs
  • many improvements and bugfixes related to inherited properties and inherited variables (from ancestor classes)
  • added regression tests for OO class analysis
prolint release 67, 18 February 2007:

Bugfix release and also one new rule:

  • new rule publicvar searches for public variables in classes.
  • fixed a rather silly bug in rules bufdbmeth, bufdbproc and bufdbfunc.
  • fixed a false positive in rule "tablename" when a variable (or property) was accessed that was defined in an inherited class. Prolint can now parse the superclasses of a class to help eliminate this problem.
prolint release 66, 11 February 2007:

Several changes to make Prolint work with OOABL classes (but don't worry Prolint still works in DLC 9 too):

  • Prolint would only scan *.p and *.w files. This is changed to "*.p,*.w,*.cls" and you can override this filter in prolint.properties.p
  • Fixed error reading XREF files when the parsed sourcefile is a class that inherits from another class
  • Added support for METHOD and CLASS in several rules, like rule tableusage, endtype, nameconv, tablename, varusage, where-udf, noeffect

Several other enhancements, not related to OOABL:

  • Added new rules bufdbproc and bufdbfunc and bufdbmeth: enforce the usage of DEFINE BUFFER in order to scope buffers to the ip/udf/method
  • Give a hint when file protools.dat was not found, instead of silently fail
  • Helpfiles removed!! All Help buttons now open live pages at http://oehive.org/prolint instead of static pages in the prolint/help directory
  • fixed false positives in rule "tablename" related to the GUID function and for unqualified fields in the RELATION-FIELDS option in the DEFINE DATASET statement
prolint release 65, 5 August 2006:
  • rule "findstate": fixed false positives that occured when the
    unique index has a boolean field and the WHERE clause contains
    something like "NOT thelogicalfield"
  • Hardened the regression test. The regression test now requires a
    database named "prolintest.db" located in directoy
    prolint/regrtest/db. A dictionary file is provided
  • tested with Proparse version 3.0b which was released this week
  • drastic housekeeping in the directories. The root of prolint is
    now almost empty: most stuff is now stored in the new subdirectories prolint/core and
    prolint/launch, some stuff is simply deleted
prolint release 64, 14 March 2006:

Important: Prolint 64 does not run in Progress version 8 anymore.
If you are still running Progress 8, then please use Prolint release 63.

  • support for HP-UX. By John Green
  • prolint tries to compile with and without STREAM-IO option so a
    sourcefile that was designed for GUI can be processed in a TTY batch
    session. By John Green

  • rule "nobrackets": added some more methods to check for (BUFFER-
    CREATE,BUFFER-RELEASE,QUERY-CLOSE). By John Green

  • desktop.w used to give a warning when adecomm.pl is not extracted.
    This is changed: the warning only fires when desktop.w is not
    compiled. By Carl Verbiest

  • added new rule "nameconv". By Carl Verbiest
  • improved position of Prolint button in Roundtable desktop. By Carl Verbiest
  • added Prolint menu-items to Appbuilder. By Carl Verbiest
  • added new outputhandler "logexcel.p" for output to Excel (in
    Office 11 only). By Carl Verbiest

  • improved rule "findstate": when a buffer definition is not found
    in the current ip/udf, then search for it in the scope of the
    compilation unit. By Carl Verbiest

  • added configuration file "prolint.properties.p" for more flexible
    customization. The old file "customize.i" is gone. By Jurjen
prolint release 63, 25 Januari 2005:
  • tuned function RelativeFilename in lintsuper.p some more.
  • changed file location of the ini-file for Roundtable check-in validation, the new search order allows for better administration.
  • added sources for turbolint.dll to the Open Source project
prolint release 62, 12 December 2004:

No new features but performance improvements. The overall performance improvement in my test was around 10%, but depends highly on the files you inspect, which rules you choose and how many warnings are generated.

  • Added 4 rules to Turbolint.dll:
    rules "colon-t", "maxchar", "strattrib" and "runname".

  • tuned function RelativeFilename in lintsuper.p
    This function appears to be a performance bottleneck if Prolint generates many warnings.
prolint release 61, 12 December 2004:
  • added new rule fnusage:

    by Igor Natanzon.
    looks for functions that are never called.

  • added new rule emptyblock:

    by Igor Natanzon.
    looks for blocks that are empty.

  • added new rule groupassign:

    by Igor Natanzon.
    looks for ASSIGN statements that can be combined to one single ASSIGN statement.

  • added new rule lexcolon:

    by Igor Natanzon.
    Looks for block headers that do not end with a colon.

  • added new rule tableusage:

    by Igor Natanzon.
    Looks for buffer and temp-tables that are defined but bever used.

  • added new rule ttlock:

    by Igor Natanzon.
    looks for EXCLUSIVE-LOCK and NO-lOCK options on temp-tables.

  • added new rule weakchar:

    suggested by Greg Higgins, discussed on PEG.
    Looks for IF conditions that forget to test if a string has the unknown value.

  • work-around for API-related bug in OpenEdge 10.0:

    Prolint.p could not call Turbolint.dll in OpenEdge 10.0. It should work now.
prolint release 60, 23 September 2004:
  • improved rule tablename:

    rule "tablename" gives false poitives on function NOW or when a function has a table-handle parameter. Reported by Julian Lyndon-Smith.

  • imrpoved the Preview pane of the Results window:

    A small bug in the code preview side of things. If you have code preview open, and press the "Lint this ccu again" an error appears with "CheckForChanges not found". Found and solved by Julian Lyndon-Smith

  • improved rule sharelock:

    fixed a false positives in relation to PRESELECT. Reported by Thomas Hegedus
prolint release 59, 13 April 2004:
  • the Code Preview window is now an editor! This makes it very easy to correct the problems found by Prolint.

    Submitted by Ildefonzo Arocha.

  • Rules are now grouped in categories.
  • new button "Rebuild Help" rebuilds help files, merging your help for your custom rules.
  • bugfix in rule "abbrevkwd" in turbolint:

    FORM is not always an abbreviation of FORMAT.

  • another bugfix in rule "abbrevkwd" in turbolint:

    EXCLUSIVE is always an abbreviation of EXCLUSIVE-LOCK.
prolint release 58, 15 February 2004:
  • added new rule runnotfound:

    search for statements like "RUN test.p" and warns if file "test.p" does not exist.

  • added new rule runasnotfound:

    search for statements like "RUN test.p ON hServer" and warns if file "test.p" does not exist.

  • added new rule undoretry:

    "UNDO" without option behaves like "UNDO, RETRY" but RETRY is almost never desired.

  • improved rule abbrevkwd:
    • keywordlist refreshed for OpenEdge 10 (used by rule abbrevkwd)
    • accept NO-LABEL in ab-generated blocks. fixed by Sven Persijn.
    • ignore com-handle properties and methods
  • improved rule findstate:

    false positive on "FIND customer OF order". fixed by Sven Persijn

  • improved rule nowhere:

    the rule will not complain anymore when you used "OF" instead "WHERE". fixed by Sven Persijn

  • added new rule oflink:

    compensates fixes in "findstate" and "nowhere" by adding a new rule that warns when
    you link records using "OF" instead "WHERE".

  • button "Lint Active AB" now uses the most recently used profile by default (the old default profile used to be blank). Submitted by Dennis Hardy
prolint release 57, 8 december 2003:
  • improved rule sharelock:

    added test for the PRESELECT statement.

    Submitted by Olivier FOUAN.

  • improved rule ifparens:

    removed many, many false positives.

  • improved rule backslash:

    removed warning for backslash in filename of WRX binary in procedure control_load.
prolint release 56, 1 december 2003:
  • added new rule ifparens:

    checks if every IF function to see if it needs parentheses.

  • bugfixes in processing of _proparse_ prolint-nowarn directives
  • bugfix in outputhandlers/logwin.w regarding reading the system registry.
  • added feature: window selectfiles.w remembers the most recently used profile.
prolint release 55, 25 november 2003:

The Results window (logwin) is completely rewritten by Ildefonzo. It now contains
a treeview and a listview, and a very convenient code preview pane too.


This new Results window is the default if you are using Progress 9.

If you are using Progress 8, you will automatically get the old
Results window which has been renamed to logwin8.

Features of the new Results window:

  • User Interface redesign:
    • Added a Tree View to display warnings by source file and ruleID.
      Treeview nodes are displayed in colors depending on the severity
      of the warning/error.

    • Added a List View to display details of each warning
      ListView sorts upon clicking on column header

    • Replace Text buttons with Image buttons
    • Hide/Display button of Tree View
  • New Functionality
    • Added Code Preview Window
    • Resize Possibility
    • Delete Button only deletes warnings display in the List, node sensitive
    • User Settings are stored to the registry
  • Dropped Functionality
    • Saved files are not saved using the same sort order as displayed
    • Removed all version 8 compatibility stuff
prolint release 54, 27 october 2003:
  • new rule: unquoted:

    Warns if you use an unquoted string.

    This rule requires proparse 2.0b.

  • refactored: existing filters are now filter plug-ins and you can easily add your own custom filters.
prolint release 53, 14 october 2003:
  • new feature: exclude warnings based on file patterns and rule patterns. See last paragraph (about file exclude.lst) on page Suppress warnings

    This exclude filter was submitted by Ildefonzo.

  • several bugfixes in rules "runname" and "tablename"
  • bugfix "shared variable not yet created" when roundtable custom hook was started from within the roundtable API, instead from the roundtable desktop.

    This bugfix was submitted by Ildefonzo.
prolint release 52, 28 September 2003:
  • new feature: Roundtable Check-in Validation:

    Prolint can validate objects before they are checked in into Roundtable, and can abort check-in when specified warnings are found.

    This is highly configurable, see help on page Roundtable Check-in Validation

  • new rule: tablename:

    Warns if you use a fieldname without qualifying it with a tablename (eg "cust-num" instead "customer.cust-num")

    Based on an idea by Marlene La Varta

  • bugfix in rule: abbrevkwd:

    "FORM" is usually an abbreviation of "FORMAT", unless it is used at the head of a FORM statement.
prolint release 51, 21 April 2003:
  • new rule: abbrevtable:

    Identifies abbreviated record names.

    Submitted by Igor Natanzon on TWiki.

  • new rule: idiskeyword:

    warns when you define a variable (or parameter, temp-table, field, buffer) with a name that is also a Progress keyword.

prolint release 50, 6 April 2003:
prolint release 49, 5 April 2003:
  • new rule: when:

    warns about ASSIGN...WHEN... statements

  • new rule: errortext:

    Warns when it finds a "RETURN ERROR." statement. RETURN ERROR should have a string argument.

    Requested by Jay A. MArtin.

  • new rule: alertmessage:

    MESSAGE not an Alert Box

    Submitted by Igor Natanzon on TWiki.

  • new rule: endtype:

    Type of END statement not qualified in PROCEDURE, FUNCTION, or CASE

    Submitted by Igor Natanzon on TWiki.

  • added dialog prolint/dnewrule.w

    This dialog helps you insert a new record into the list of rules (rules.d)

  • added procedure prolint/lintproglist.p, by John Green

    runs prolint for all files that are listed in a text file.

  • added procedure prolint/rtb/wspace-culist.p, by John Green

    lists names for all compilable programs in a Roundtable workspace into a text file.

    This file can be used with lintproglist.p to lint an entire workspace.

    The program also generates .p for HTML objects into a temporary directory so these can be linted too.
prolint release 48, 27 Januari 2003:
  • bugfix in rule: varusage:

    should treat buffer parameters like table parameters: just ignore the identifier.

  • bugfix in prolint.p:

    installation directory (on Windows) is now written in registry in HKCU, because HKLM may be write protected
prolint release 47, 15 December 2002:
  • improved rule: strattrib:

    the rule now ignores the Length specification in the string attribute; only looks at the Justification spec.

  • improved rule: noundo:

    now allows "DEFINE INPUT PARAMETER TABLE-HANDLE" without NO-UNDO, because NO-UNDO is not allowed by the compiler.

  • proparse directives (prolint-nowarn) now also works for rules that don't rely on Proparse, like rules "wholeindex" and "sortaccess"
prolint release 46, 5 November 2002:
  • added new rule obsoletenodes:

    Searches for obsolete keywords in your source. You can configure the list of obsolete keywords to search for, in file "prolint/rules/persist/obsoletenodes.p"

    this rule was submitted by Igor Natanzon.

  • removed rule "recid" because obsoletenodes can handle this.
  • fixed a file locking bug in turbolint.dll:

    turbolint used to crash when it had to read a sourcefile while it was locked by an other process, like ED for Windows.

Prolint.p and Lintsuper.p have been changed to support obsoletenodes:

  • there is a new directory: "prolint/rules/persist". This directory may contain procedures whose names are identical to the names of rule procedures. These procedures in prolint/rules/persist are loaded persistently by prolint.p and their handles are passed to the actual rules.
  • Lintsuper contains a new procedure PublishWarningSeverity. It is identical to PublishWarning, except it has an extra parameter that allows to override the default severity level.
prolint release 45, 13 October 2002:
  • changed configuration for custom rules: the search order for each rule is now: first "prolint/custom/rules" then "prolint/rules". File "prolint/custom/rules/rules.d" can be used for overriding severities for non-customized rules too.
  • help is not compiled HTML Help (chm) anymore. The problem with CHM was that it did not search for custom help in directory "prolint/custom/help".
  • improved rule sharelock:

    fixed false positive: work-tables should be handled just like temp-tables

  • improved rule use-index:

    fixed false positive: should not raise a warning for the USE-INDEX option in the DEFINE TEMP-TABLE statement.

    bug submitted by Arjen Hoekstra

  • removed warnings #201 and #203 from rule ifindent2
  • added new rule messagetype:

    checks if every "message... view-as alert-box" specifies a type (error, question, information, etc).

    this rule was submitted by Igor Natanzon.

  • added new rule dbtrigger:

    checks if there is any DISABLE TRIGGERS in sourcefiles

    this rule was also submitted by Igor Natanzon.

  • added new rule matches

    Reports every use of MATCHES, because MATCHES is often bad for indexing.

    Submitted by Murray Hermann.

  • added new rule noerror

    Reports every use of FIND without NO-ERROR.

    Submitted by Murray Hermann.

  • added new rule uninproc

    Reports internal procedures that are never used.

    Submitted by Murray Hermann / Breck Fairley.

New rules to help you test if your source is ready to be used with an Oracle dataserver:

  • added new rule allfinds

    Reports every FIND that has a FIRST|PREV|NEXT|LAST qualifier. Oracle does not work well with those.

    Submitted by Murray Hermann.

  • added new rule contains

    Reports every use of CONTAINS, for Oracle compatibility.

    Submitted by Murray Hermann.

  • added new rule create

    Reports every use of CREATE buffer, for Oracle compatibility.

    Submitted by Murray Hermann.

  • added new rule query

    Reports every QUERY that is defined without SCROLLING if that query is used with GET PREV or GET LAST. For Oracle compatibility.

    Submitted by Murray Hermann.

  • added new rule sequence

    Reports every usage of sequences, for Oracle compatibility.

    Submitted by Murray Hermann.
prolint release 44, 6 October 2002:
  • new: statistics by includefile, from data in prolintdb. Note: this involves a dictionary change in prolintdb!
  • added new rule: findstate-tt:

    similar to existing rule "findstate", but findstate-tt ignores database tables and only reports temp-tables. The purpose of this split is that you can assign different severities for temp-tables and persistent tables.

  • improved rule: findstate:

    This rule will not raise a warning when the FIND statement tries to find a temp-table record, because those are handled by new rule findstate-tt.

    Also: suppressed many false positives, by comparing fields in the WHERE-clause with fields in unique indexes. This improvement only works in Progress 9 because there is no fast/easy way in Progress 8 to retrieve index definitions (well, unless there is only one database connected).
prolint release 43, 5 October 2002:
  • new feature: save Prolint warnings in a database and query statistics. See help topic prolintdb.
prolint release 42, 3 October 2002:
  • in Prolint Desktop, the buttons "Lint Active AB" and "Lint Open AB" are now functioning. Thanks to Martijn Voncken.
  • added new rule: colon-t:

    report strings that begin or end with whitespace and have the :T attribute.
prolint release 41, 9 September 2002:
  • improved rule "ifindent":

    Several false positives removed by Judy.

    Added regression tests (also by Judy).

    Turbolint updated accordingly by Jurjen.

prolint release 40, 1 September 2002:
  • improved rule "findstate":

    warnings are suppressed when you FIND by ROWID.

  • new: turbolint:

    performance boost by using some more 3GL. (Windows only)
prolint release 39, 28 August 2002:
  • changed new rule: "where-udf":

    removed many false positives.
prolint release 38, 28 August 2002:
  • added new rule: "where-udf":

    This rule locates WHERE clauses that contain user-defined functions. Submitted by John Green.
prolint release 37, 5 August 2002:

New rules and improvements by Breck Fairley and Jamie Ballarin:

  • improved rule "varusage":

    The warning text distinguishes between variables that do not appear in
    the source at all, and variables that are assigned although their values are never used.

    Output parameters that aren't used are by default not reported, but this can be changed in customize.i.

    The new version of this rule also finds more instances of local variables that are hiding large-scoped variables.

  • added rule "findstate":

    Gives a warning when a FIND statement is not qualified with [FIRST|LAST|NEXT|PREC|CURRENT] and is not immediatey followed by an IF AMBIGUOUS test.

  • added rule "ttnoindex":

    Gives a warning when "DEFINE TEMP-TABLE xxx LIKE yyy" does not contain index definitions, because all indexes of "yyy" are inherited even if those are not required.

Also:

  • patched rule "backslash":

    The source for this rule did not compile on Linux or Solaris. Reported by Jurgen Van Bouchaute.

  • fixed bug: {&_proparse_ prolint-nowarn()} just before a block-label did not work. Reported by Neil Barton-Greenwood, fixed by John Green.
prolint release 36, 7 July 2002:
  • improved rule "ifindent":

    The rule now uses the new function parserGetNodeColumn(node).

    Submitted by Judy Hoffman Green.

    This improvement requires Proparse version 1.0h: upgrade Proparse if you didn't already.

  • improved rule "i18nlength":

    The "type" parameter is not only checked on LENGTH, but also on SUBSTRING and OVERLAY.

    Submitted by John Green.

  • tempfiles: prolint creates a unique tempdir where it stores its tempfiles, and deletes the tempdir afterwards.
  • Enhancements to the Results window:
    • you can now specify a filter (where-clause) for warnings in the browse.
    • the "Save log As" button saves only warnings that match the filter, and also uses the current sort order!
    • you can also delete all warnings that match the filter.

    The main purpose of this, is to copy warnings from the Results window to
    the "Build"-window in ED for Windows (the editor), using the current filter and sort order.
    This is by far the easiest way to correct your sourcefiles!

    You will also need to download todays version of proed4w to do this.
    See integration with ED for Windows for details.

prolint release 35, 30 June 2002:


  • Added new rule "ifindent"

    by Judy Hoffman Green.

    The main purpose of this rule is to look at indentation in and after IF
    statements and to warn for confusing indents. For example:

        IF ready THEN
           ASSIGN
              x = a
              y = b.
              z = c.
    

  • Removed win32-api calls from "Prolint Desktop" window for Linux compatibility, as requested by Murray Hermann.

prolint release 34, 24 June 2002:


  • Added a new window: Prolint Desktop (run prolint/desktop.w).

    It makes working with Prolint a bit easier.
  • Added a new rule: "backslash".

    Looks for backslashes (but ignores "~\") in strings and filenames, to ensure portability for Unix.
  • improved rule "substitute":

    Gave some false positives because it didn't consider empty strings as untranslatable.
  • improved rule "nocomment":

    Ignores comment before a procedure/function when it looks like it belongs to the previous procedure/function. For example:

    END PROCEDURE. /* end of procedure AA */
    PROCEDURE BB :
    

prolint_33.exe, 22 June 2002:


  • One little improvement in outputhandler pro4mfile.

prolint_32.exe, 22 June 2002:


  • Added a new outputhandler (pro4mfile) and matching profile (pro4m) for integration with PRO4M by Yuriy Setko. These will be called automatically from within PRO4M if you installed 3PRO, see http://www.progress-plus.com for details.
  • Using a Windows installer now. Please use it instead of the .zip format. The installer tests if you are attempting to overwrite a newer release, and does not overwrite your custom files in prolint/settings.
  • Added a test to Prolint to see if it is installed in more than one directory.

prolint_031.zip, 19 June 2002:

No functional differences, added conditions for the GNU Lesser General Public License.

prolint_030.zip, 31 May 2002:
  • improved rule "nocomment":

    The rule used to raise a warning when a procedure/function does not begin with a comment.
    Patrick Tingen improved this: a comment directly before the procedure/function is also accepted.
prolint_029.zip, 27 May 2002:

Bugfix: profile "<none>" failed.

prolint_028.zip, 26 May 2002:

New: the option to use "local profiles". The existing profiles in directory "prolint/settings" are from now on "shared profiles".



Local profiles can be convenient when:

  1. a particular Progress-project requires different Prolint-settings,
  2. a programmer in a development team wants his own private profiles.

The lists of Local profiles and shared profiles are merged at run-time, local profiles take precendence unless the shared profile is marked as "not overrideable".

See page "profiles" for more info.

prolint_027.zip, 16 May 2002:

Some minor changes for compatibility with Proparse 1.0f00.


Proparse 1.0f00 (or later) is required for this release of Prolint, see
http://www.joanju.com


Other than that, there are no changes in Prolint at this
moment.

prolint_026.zip, 28 April 2002:

Wouldn't it be great if "ED for Windows" had a toolbar-button to run Prolint for the source you're editing? Well, read on..


  • bugfix in Roundtable integration

    The compile-event would cause a local copy of a sourcefile to be copied to the central directory.
  • added new rule: "do1"

    Warns if a "DO ... END" block contains only one statement. Except if that one statement is an IF statement.
  • added new rule: "maxchar"

    Warns if a string constant is longer than 188 chars (unless it is marked as :U) because Translation Manager cannot import strings longer than 188.
  • new feature: Prolint can be invoked from with ED for Windows!

  • bugfixes for Linux compatibility

    Judy Hoffman Green has tested Prolint on Linux and kindly submitted the necessary changes.
  • bugfix in rule "runname":

    The rule would say that filename is not unix-compatible when filename is enclosed in quotes and has a :U attribute.
    Fixed by Judy Hoffman Green.
  • bugfix with very long lines in outputfiles:

    When a string is very long or contains linefeeds, it would cause problems to import an outputfile generated by Prolint. Bug found by Judy.
  • bugfix in rule "sepdbui":

    the rule assumed that "DEFINE something LIKE tablename" was a database access. It isn't, at least not at run-time. Bug found by Wilco Weultjes.
  • bugfix in rule "nowhere" and "sharelock":

    these rules raised false positives on "DO FOR tablename TRANSACTION:". Bug found by Wilco Weultjes.
  • changed default setting:

    setting "batchrun" now uses outputhandler "tabfile.p" by default instead of "logfile.p".

More about ED for Windows integration: see page "ed4win".

prolint_025.zip, 24 February 2002:


  • improved rule "substitute"

    There is no need to raise a warning when every string in
    the statement has the :U attribute.
  • added new rule: "dotcomment"

    Warns when a statement begins with a dot (aka period)
    because it makes the statement behave like a comment.
  • added new rule: "recid"

    Warns on every occurence of the keyword RECID, because
    it should be replaced by ROWID
  • added new rule: "use-index"

    Warns on every occurence of the keyword USE-INDEX.
  • Prolint used to accept only filenames. Now
    it accepts filenames and/or directory-names in any mix.
    Directories are (recursively) scanned for *.w and *.p.
  • The results windows has an extra statusbar-panel:
    percentage done. This panel is updated when multiple
    files (or directories) are processed.
  • added new outputhandler: "tabfile"

    This outputhandler writes to a tab-delimited file.
  • Buttons [Save log as] and [Import log] in the resultwindow are now functioning, at last, although quick
    and dirty. [Save log as] sends the contents of the
    resultwindow through outputhandler "tabfile". [Import
    log] reads a tab-delimited file, previously written by
    "tabfile" of by the [Save log as] function and populates
    the resultwindow with it. Pretty simple but it may be
    convenient.

prolint_024.zip, 22 February 2002:


  • added new rule: "runargs"

    This rule looks for RUN-statements with run-time
    arguments. These are often the result of a simple
    typo, like forgetting to end the RUN-statement with a
    period, or closing the parameter-list with a parenthesis
    too many, for example run something("")).

prolint_023.zip, 20 February 2002:


  • new rule: "substitute"

    This rule looks for concatenations of strings, like:

    MESSAGE "customer " + custnum + " just ordered item " + itemnum.

    and will advice you to use the SUBSTITUTE function
    instead to help translation.

prolint_022.zip, 20 February 2002:


  • Found and fixed a new bug in rule "noundo.p":

    Prolint raised a warning that NO-UNDO was not used
    with parameters, even if they actually were NO-UNDO, like:

    define input parameter hBuffer as handle no-undo.

prolint_021.zip, 19 February 2002:

Gerry Winning has improved the integration with
Roundtable:

  • Prolint can now inspect HTML objects (webspeed).

    How it works: you first press "Compile"-button
    in Roundtable so Roundtable generates a .w file and
    stores it in the same directoy as the .html-file. Then
    when you press the "Lint"-button in Roundtable it will
    find and inspect this .w file.
  • bugfix: when an object was checked out to the
    Task directory, Prolint would still inspect the
    sourcefile in the Central workspace directory.

Note: you have to include {prolint/rtb/custom_evnt.i} in
roundtable/rtb_evnt.p and recompile it before these
changes are effective. The old {prolint/rtb/addmenu.i}
is now obsolete because it's name is not descriptive
anymore and can be removed.

Thanks Gerry!

prolint_020.zip, 12 February 2002:

This version requires Proparse 1.0e01.

Internal changes to Prolint by John Green for
compatibility with Proparse 1.0e01:

  • noeffect.p

    OBJREF is toast, replaced with OBJCOLON. Fixed the check for
    Method_param_list,
    which may be either two or three sibling nodes away from the OBJCOLON.

  • abbrevkwd.p

    Added OBJCOLON as a node type to rule out.
    Removed the workaround for node type OBJREF.
    The colon (OBJCOLON) and the method/attribute name are no longer stored
    in the text of that one node - they each have their own node now.

  • sepdbui.p

    "child" nodehandle was unused? Changed its name to tempNode, and used it.
    :-)
    Changed name of FoundObjRef to FoundObjColon, searches for OBJCOLON instead
    of OBJREF. Now checks the text of the next sibling after the OBJCOLON.

  • varusage.p

    It is no longer necessary to create a query on OBJREF when the following is
    found:

    #(EQUAL #(Field_ref ... ) ... )

    Removed those checks.
    IMPORT doesn't seem to allow IMPORT into "widattr",
    only into "field", so
    there's
    no need to check for that.

    From "ProcessFieldRValue": /* TODO: perhaps not the _first_ child */
    ...done.
prolint_019.zip, 16 January 2002:

Prolint is tested with Proparse 1.0d.

Other than that, there are no changed in Prolint at this
moment.

prolint_018.zip, 5 December 2001:

This release of Prolint only has some internal changes to take advantage of new functions in Proparse 1.0c.

There are no functional differences but Prolint will probably run faster now.

Prolint will not run with Proparse 1.0b or older.

Prolint does not use any of the following functions anymore: ParserGetTopNode, ParserGetFirstChild, ParserGetNextSibling.

prolint_017.zip, 24 October 2001:
  • Prolint is tested with Proparse 1.0b.
  • improved rule "sepdbui" to take advantage of a bugfix in Proparse 1.0b. Also: sepdbui used to write a fully-qualified pathname in its warnings, this is replaced by a relative pathname.
  • replaced a couple of backslashes by "~\" or "/", to help porting the prolint source to Linux.
prolint_016.zip, 4 October 2001:
  • Prolint is tested with Proparse 1.0a.
  • added new rule "sepdbui": User Interface should be separated from database access; this rule raises a warning when
    a procedure contains both. I have to admit this rule is hardly tested.

  • Improved Results window: now shows contents of selected row in wide fill-ins, so it is easier to read in Progress 8 where browse columns are not resizable.
  • bugfix: rule "nowhere" reported a warning on line 1 of AB-generated source.
  • bugfix: drag/drop didn't work anymore in dialog "select files to lint".
prolint_015.zip, 9 September 2001:
  • Prolint is tested with Proparse 0.5c.
  • Prolint shows an hourglass-cursor while it is busy. Code submitted by Jeff Pilant.
  • improved rule "strattrib": it will not raise warnings for missing string attributes on labels for sub-menu or menu-item widgets.
    This new exception to the rule was necessary to work around a bug in UIB/AB: a menu with string attributes is not rendered at design-time. Bug reported by Jeff Pilant.

  • improved rule "abbrevkwd":

    "COLUMN" is no longer regarded as an abbreviation for "COLUMNS". Bug reported by Jeff Pilant.

    The rule is made 20-30% faster (so it is still slow).

    Rule will (by default) suppress warnings for abbreviated keywords in UIB/AppBuilder-generated sections.

  • Any individual rule can be switched to suppress warnings for code in UIB/AppBuilder-generated sections by changing
    the last logical column in file prolint/rules/rules.d from no to yes. But I believe it is not wise to do so, in general.

  • Outputhandler "showhtm" now also produces hrefs to helptopics on each warning.
prolint_014.zip, 2 September 2001:
  • Prolint now runs in Progress 8 or 9, GUI or ChUI (but unfortunately there is no visual UI for ChUI sessions yet)

    It is tested with Progress 9.1B GUI, Progress 9.1B ChUI and Progress 8.3B GUI.

  • added outputhandler "showhtm": writes output to an HTML file and shows this file in the default browser. Just for fun and also to make up for the lack of UI in ChUI sessions.
  • improved rule "runname": now simply ignores every run-statement inside internal procedure RTB_xref_generator. Bug reported by Hans Krukkert.
  • improved rule "varusage": rule got confused if a sourcefile contains two event-handlers for the same event (like "on choose"). Bug reported by Wytze Vlasman.
prolint_013.zip, 26 August 2001:
  • Prolint is tested with Proparse 0.5b01. This was easy: didn't need to change anything to Prolint to make it work with this proparse version.
  • improved rule "runname": now ignores run-statements where filename contains "*RTB-SmObj*". Those run-statements are inserted by Roundtable only to help its XREF generator. Bug reported by Hans Krukkert.
  • improved rule "blocklabel": now ignores LEAVE if it's an event instead of a statement (like "ON LEAVE OF widget"). Bug reported by Hans Krukkert.
prolint_012.zip, 21 August 2001:
  • added support for custom rules, see how to create a custom rule.
  • added new rule "shared": disallows all SHARED objects, but allows NEW GLOBAL SHARED procedure-handles.
  • improved rule "noundo" again: fixed support for the undocumented UNDO option.
  • initial value for combo-box "profile" in window "Prolint Configuration" is set to the current profile, sort of. Requested by Hans Krukkert.
prolint_011.zip, 19 August 2001:
  • Prolint is tested with Proparse 0.5a01
  • Prolint imports file "prolint/settings/dbaliases.d" if it exists. You can use this file to specify database aliases in case your program uses aliases. See page Settings and Profiles.
  • Improved integration with Roundtable: added menu-items to the "Tool"-menu and also a Prolint-button to the Roundtable desktop window. See page Roundtable integration.
prolint_010.zip, 9 August 2001:
  • Prolint is now compatible with Proparse 0.5a

    Don't forget to upgrade to this version of Proparse if you didn't already.

    (Fixes in Prolint posted by John Green)
prolint_009.zip, 30 July 2001:
  • improved rule "noundo": should ignore parameters for DLL functions because NO-UNDO has no effect (reported by Tony Lavinio)
  • if prolint needs to compile source, it will now compile without the 'save' option (will not produce or overwrite .r-code)
prolint_008.zip, 27 July 2001:
  • added Roundtable integration in two different ways: see page roundtable integration
  • removed file prolint/rtbtask.p, roundtable-related procs are now located in directory prolint/rtb
  • improved rule "noundo": ignore buffer parameters as they cannot have NO-UNDO (fix posted by Chris Paulson. Thanks Chris!)
  • improved rule "varusage": it now reads the IMPORT statement similar to the ASSIGN statement.
  • internal changes in wholeindex.p and sortaccess.p, thanks to hint from Patrick Tingen
  • added option to prolint/customize.i for specifying that you prefer to see the ldbname in warnings
  • added some more HTML documentation. Not enough, but hey this is boring work
prolint_007.zip, 26 July 2001:
  • serious bug fixed: rules running after "abbrevkwd" could report random warnings, caused by a memory-related problem in rule "abbrevkwd" (or actually: in procedure searchNodeTree in lintsuper.p).
  • improvement: button "Lint again" does not clear all existing warnings from the Results window anymore. This is convenient if the Results window contains warnings for more than one compilation-unit.
  • added input parameter to prolint.p: pClearOutput as logical.
  • added input parameter to published event "Prolint_InitializeResults": pClearOutput as logical.
  • renamed published event "Prolint_Status_Newfile" to "Prolint_Status_FileStart" and added new published event: "Prolint_Status_FileEnd"
  • added button "RTB Task" to dialog selectfiles, but it doesn't work yet :-(
prolint_006.zip, 25 July 2001:
  • Prolint is now compatible with Proparse 0.4d01

    Don't forget to upgrade to this version of Proparse if you didn't already.

  • Added rule "noeffect", by John Green
prolint_005.zip, 23 July 2001:
  • changed "COMPILE..SAVE.." statement in prolint.p, as requested by Michael Troelsen
  • improved the way XREF files are analyzed in rules "wholeindex" and "sortaccess". The new method (using the IMPORT statement) works better
    for filenames that contain spaces.
prolint_004.zip, 23 July 2001:
  • added rule "message".
  • improved rule "nowhere": it will not raise a warning anymore for "FIND CURRENT buffername" statements. This bug was found by Zane Appel.
  • improved the handling of "PROPARSE prolint_nowarn" directives: the directive was applied to all statements inside a DO: block, which wasn't correct.
prolint_003.zip, 15 July 2001: