============= Writing Rules ============= The `YAML `__ configuration file consists of a list of *rules*. Each rule has: - A short name - A short description - A list of *queries* - A list of examples Here is an example of a simple rule which exhorts its user to simplify compile-time constant additions: .. code-block:: yaml rules: - name: simpl-binop-plus short: Simplify constant binary operation (+) long: > Some extended description of this rule. examples: - before: | even(2 + 2). after: | even(4). queries: - | (binary_op left: (constant) operator: "+" right: (constant)) You can view the built-in configuration file at ```./config/default.yml``. A query describes a pattern in the program’s concrete syntax tree (CST), a rule triggers a warning when the query matches its CST. Queries are written in the `tree-sitter query language `__. The name should be less than 30 characters, the short description should be less than 60 characters. Showing the Parse Tree ====================== You can see the tree-sitter S-expression (i.e., concrete syntax tree) corresponding to Datalog source file(s) using the ``sexp`` command: .. code-block:: bash souffle-lint sexp file.dl See ``souffle-lint sexp --help`` for more details and other options.