Query language for Libadalang and Langkit. Allows to run queries on Ada codebase using a custom designed query language called LKQL.
The syntax is not stable for now.
lkql/
: Contains:
- Langkit language definition for the LKQL parser
- Implementation of the LKQL interpreter (in
lkql/extensions/src
). Embedding the LKQL interpreter only requires using thelkql
project. - Command line app for the interpreter
lkql_checker
: LKQL command line checker. Can run "checks"
that will flag specific lines of code in a given Ada codebase.
You need to have GNAT, langkit and libadalang all available and in the proper paths.
- Building LKQL is done via
lkql/manage.py make
- You can then make LKQL available (binaries, Ada libraries, and Python lib) via:
eval `lkql/manage.py setenv`
- LKQL checker (linter based on lkql) is built separately:
gprbuild -P lkql_checker/lkql_checker.gpr -p
cd testsuite
# Run the testsuite, keep the temp results in tmp
python testsuite.py -dtmp
You can run the performance testsuite with the following command:
cd testsuite
python testsuite.py --perf-mode result.out [--perf-no-profile]
NOTE: You must checkout the libadalang internal testsuite in the testsuite/ada_projects
directory to be able to run performances tests.
To add a test case in the testsuite you must follow the e3-testsuite standard. Moreover
you have to annotate Ada flagged lines when using checker
and gnatcheck
drivers.
To annotate an Ada line as flagged you must follow this syntax:
My_Function (My_Arg); -- FLAG This line should be flagged by the test case
If a line is flagged multiple times by the test case you can use this syntax:
My_Other_Function; -- FLAG (2) This line should be flagged two times
If you want to ensure a line is not flagged by the test case you can use the NOFLAG
annotation:
Not_Flagged (My_Arg); -- NOFLAG