=============================
CodePeer 19 NEW FEATURES LIST
=============================

Copyright (C) 2021, AdaCore

This file contains a complete list of new features in version 19 of
CodePeer. A full description of all CodePeer features can be found in
the CodePeer documentation.

An ISO date (YYYY-MM-DD) appears in parentheses after the description line.
This date shows the implementation date of the feature. Any 19.0w wavefront
subsequent to this date will contain the indicated feature, as will any
subsequent 19 or later release.

NF-SA30-033 Improve performance of partitioning algorithm (2019-11-19)

  The performance of the partitioning algorithm was significantly
  improved (by several orders of magnitude). As a result, the
  analysis phase should start shortly after the compilation phase
  even for large codebases.

NF-S223-008 Excluded_Source_Files for files in subprojects (2019-06-18)

  The project attribute Excluded_Source_Files can now be used in the
  root project to specify files in subprojects and exclude the
  corresponding files from analysis, instead of generating a warning
  and not excluding them.

NF-RA31-042 New switch -show-header-only (2018-11-29)

  A new switch -show-header-only is introduced to only display the
  header of a codepeer run and not the associated messages, when
  combined with -output-msg-only.

NF-RA31-009 Custom exit code showing number of messages (2018-11-05)

  A new switch -exit-code will, when combined with -output-msg, set
  the CodePeer process exit code to the number of messages emitted
  in a given category (all, unchanged, removed, added). This can be
  useful for runs automation in particular.

NF-R925-014 Default level of analysis set to 0 (2018-10-02)

  The default level of analysis was previously level 3 and is now
  level 0, to provide a smoother initial experience to users, and
  offer gradual added capabilities. To restore the previous default,
  you can use "-level 3" explicitly.

NF-R903-012 Backtrace info merged with GPS Locations view (2018-09-11)

  The backtrace information associated with precondition messages is
  now available directly in the Locations view for easier access.
  The previously available Backtraces view has been removed. In
  addition, a new preference is introduced to enable/disable this
  extra information.

NF-R818-003 New switch -show-all (2018-09-03)

  A new switch -show-all is provided to show all message kinds via
  -output-msg or -html. This is a convenient shortcut for -show-
  added -show-removed -show-info -show-annotations.

NF-R807-006 -j0 enabled by default (2018-08-08)

  The -j0 switch is now the default for analyzing files on multiple
  cores when no -jxx switch is specified explicitly. You can use -j1
  if needed to get the previous behavior.

NF-R731-039 New switch -show-added (2018-08-03)

  A new switch -show-added, relevant when generating text messages
  via -output-msg is provided to highlight explicitly messages that
  are new compared to the base run, via the "[added]" marker, for
  easy retrieval.

NF-R731-017 Analysis time for each file (2018-08-03)

  The analysis time for each file is now displayed by CodePeer in
  its default output, allowing to identify on which units CodePeer
  is spending the most time and possibly fine tuning the analysis or
  excluding files from analysis when speed matters more than
  completeness of results.

NF-R713-016 New switch --complete-output (2018-07-13)

  A new switch --complete-output is provided which, when combined
  with -compiler-mode, will output messages for all files, including
  files that were not re-analyzed. At the same time, the default for
  -compiler-mode is now to only output messages for files that have
  been reanalyzed.

NF-R628-039 Switch -no-propagation controls preconditions (2018-07-17)

  CodePeer now accepts a switch -no-propagation which takes a
  subprogram name as a parameter, to indicate a subprograms where
  precondition propagation should be suppressed. This provides
  finer-grained control than the -no-preconditions switch, which
  suppresses all precondition propagation. Multiple -no-propagation
  switches each with a subprogram name may be provided. The
  subprogram name may have "*" as a prefix and/or a suffix to act as
  a wildcard to allow a more permissive subprogram name matching.

NF-R620-026 New switches --web-server and --port (2018-06-21)

  CodePeer now supports two new switches: --web-server which will
  launch the codepeer web server, and --port=xxx to specify the web
  server port number.

NF-R427-010 Improve display of boolean expressions in messages (2018-05-09)

  Improve display of boolean expressions involving unary negation
  and integer comparison in CodePeer messages.

NF-R320-047 Ability to specify "native" runtime (2018-03-23)

  You can now specify in the project file the following clause: 'for
  Runtime ("Ada") use "native"'' which is equivalent to not
  specifying any runtime, or specifying a "default" runtime.

NF-R301-011 --import-reviews and CSV files (2018-03-02)

  The codepeer_bridge --import-reviews switch now supports importing
  a CSV file (in addition to an XML file) to allow manual review of
  messages via a spreadsheet.

NF-R209-079 User review status renamed "Uncategorized" (2018-06-19)

  The user review status previously called "Unclassified" is now
  called "Uncategorized" to avoid any possible confusion with e.g.
  "Classified" code.

NF-R131-048 GNATdashboard now packaged with CodePeer (2018-02-27)

  The GNATdashboard toolset (including the gnathub executable) is
  now included in the CodePeer package and does not need to be
  downloaded and installed separately.

NF-R131-027 New command line tool codepeer_bridge (2018-02-06)

  A new command line tool is provided with the CodePeer product that
  allows advanced users to extract information easily from the
  CodePeer database. See codepeer_bridge --help and the CodePeer
  User's Guide for more details.

NF-R129-021 Accept subprogram used as renaming of intrinsic (2018-02-01)

  Even though a subprogram renaming an intrinsic isn't allowed by
  Ada, some Ada compilers accept this construct, so CodePeer now
  also accepts it.

NF-R119-026 Improved handling of unknown calls and pointers (2018-03-28)

  If a pointer is passed as an IN or IN-OUT parameter to a call to
  an unknown subprogram (a subprogram that was not analyzed by
  CodePeer or was analyzed in a different partition) and the pointer
  has only a single possible target, the target is treated as
  updated by the call. In particular, if an access to a variable is
  passed to an unknown call, the variable is treated as updated by
  the call.

NF-R117-012 Improved source partitioning algorithm (2018-07-30)

  In order to avoid capacity problems associated with processing a
  large program all at once, CodePeer sometimes partitions the
  sources that are to be analyzed and then analyzes each partition
  element separately. Improve the algorithm that is used to choose
  this partition with the goal of reducing the number of calls where
  the unit containing the caller and the unit containing the callee
  are assigned to different partition elements. As part of this
  change, the -no-project-partitions command line option is
  eliminated and replaced with a new "-project-partitions" option
  which has the opposite polarity. The old option defaulted to
  false, as does the  new option. This means that project-file-based
  partitioning is no longer enabled by default.

NF-QB20-030 Message on unset out parameters more visible (2017-12-11)

  The ranking of messages related to potentially uninitialized out
  parameters is bumped (from low to medium and from medium to high)
  to make them more visible.

NF-QA26-026 Race conditions disabled by default at -level 0/1/2 (2017-11-07)

  Race condition analysis is now disabled by default when using
  -level 0/1/2. You can enable this capability explicitly via the
  -race-conditions switch.

NF-QA17-006 Integration of GNATcheck in CodePeer (2018-02-02)

  CodePeer can now launch GNATcheck in order to collect its
  messages, add them into its database, and report them as any other
  CodePeer messages. This is triggered by the new CodePeer switch "
  --gnatcheck".

NF-QA12-046 Use of steps to stop analysis of complex subprograms (2018-08-09)

  To terminate the analysis of complex subprograms, CodePeer
  formerly used timeouts. The problem with a timeout is that it does
  not ensure reproducibility of results. To address this, CodePeer
  now uses a notion of steps. While analyzing a subprogram, CodePeer
  deterministically increments a counter. If the counter exceeds a
  default or specified limit, CodePeer terminates analysis of the
  the subprogram and continues analyzing the rest of the source
  code.

NF-QA12-016 Enable GNAT warnings in run dialog (2018-08-03)

  The CodePeer run dialog in GPS was enhanced with controls to
  specify desired GNAT front-end warnings.

NF-QA12-010 New switch to filter messages by their kinds (2018-07-19)

  The new switch "--be-messages=[...]" allows users to specify a set
  of message kinds, and directs CodePeer to only issue and save a
  message when its kind is part of the specified message kinds. See
  the CodePeer User's Guide for further details.

NF-Q717-009 Support for run comparisons in -output-msg (2018-02-07)

  When using -output-msg or -output-msg-only to generate a text or
  CSV listing of messages, it is now possible to use the -cutoff
  switch as well as a new -current switch to perform comparison
  between two arbitrary runs, e.g: codepeer -Pprj -output-msg-only
  -current 2 -cutoff 4.

NF-Q703-009 Improved performance in the presence of loops (2018-04-17)

  The performance of CodePeer in the presence of updates of arrays
  in loops was improved.

NF-Q628-011 Security report capability (2018-09-04)

  A new switch --security-report is now available to generate a
  security oriented report with relevant CWE ids.

NF-Q627-019 Export/Import of manual reviews from the database (2018-02-07)

  The codepeer_bridge tool now provides the ability to export and
  import manual reviews via the --import-reviews and --export-
  reviews switches to allow multiple users perform a local copy and
  local runs of codepeer and then merge their manual analysis back
  to a central database.

NF-Q516-004 Add a collection of light checkers (2018-07-31)

  CodePeer now integrates a collection of light checkers based on
  libadalang. Their aim is to find very specific bugs/suspicious
  code quickly and with no false positives. CodePeer level 0 now
  exclusively launches those checkers, and the levels 1 to 4 launch
  some of them in addition to the main CodePeer analysis.

NF-Q330-011 Simple project file set up (2018-10-02)

  CodePeer now provides a very simple project file set up where you
  only need to provide a list of source directories and optionally a
  list of filename patterns to get initial results. This capability
  is available at level 0 only and can be enabled via a new switch
  --simple-project. Higher levels still require a complete set up of
  your project file (.gpr).

NF-P307-035 Conditional preconditions for validity checks (2018-09-25)

  CodePeer is now able to generate preconditions for validity checks
  that are conditional, e.g. requires X > 0 or T'Initialized. This
  results in less unverified validity checks with low severity on
  subprogram calls.

NF-P307-015 New switch --show-backtraces (2018-09-04)

  CodePeer supports a new switch --show-backtraces which will add
  backtrace information associated with precondition messages in the
  text and CSV output.

NF-P303-057 Calls to complex subprograms handled more precisely (2017-11-03)

  When calling a subprogram that is available to CodePeer analysis,
  but is too complex to be fully analyzed by CodePeer, CodePeer is
  able to compute which variables are read and updated by the callee
  and use this information in the caller.

NF-P208-034 New HTML interface (2018-10-01)

  CodePeer comes with a completely redesigned web interface that
  uses state-of-the-art web technology and provides access to real-
  time update of message filters and manual reviews, among other new
  capabilities. This new interface can be generated via the new
  -html and -html-only switches. The old HTML interface is kept
  temporarily to help the transition, via the -html-output switch.

NF-OC23-007 Improvement in handling of the Length attribute (2018-02-09)

  In error messages, CodePeer will try to mention X'Length instead
  of X'First and X'Last when it makes more sense. The precision when
  using the Length attribute in the analyzed code is also improved.

NF-NC03-036 GPS client/server interface (2018-09-10)

  A client/server interface to the CodePeer database is now provided
  as part of the GPS IDE, allowing a review mode where manual
  reviews can be performed remotely without accessing the CodePeer
  database locally.

NF-N327-040 Better message text for float membership tests (2017-11-01)

  The display of float membership tests is improved by using
  comparison (e.g. x < y) instead of membership tests when involving
  large floating values. In addition, references to floating point
  literals corresponding to common values are replaced with a more
  readable text (e.g. IEEE_32_Float'Last or IEEE_64_Float'Last).
