##########################################################################################
# Customize file classifications.                                                        #
# Results from files under any classifier will be excluded from LGTM                     #
# statistics.                                                                            #
##########################################################################################

##########################################################################################
# Use the `path_classifiers` block to define changes to the default classification of    #
# files.                                                                                 #
##########################################################################################

path_classifiers:
  docs:
    # Identify the top-level file called `generate_javadoc.py` as documentation-related.
    - generate_javadoc.py
  test:
    # Override LGTM's default classification of test files by excluding all files.
    - exclude: /
    # Classify all files in the top-level directories test/ and testsuites/ as test code.
    - test
    - testsuites
    # Classify all files with suffix `.test` as test code.
    #        Note: use only forward slash / as a path separator.
    #        Use ** to indicate an arbitrary parent path.
    #        Use * to indicate any sequence of characters excluding /.
    #        Always enclose the expression in double quotes if it includes *.
    - "**/*.test"
    # Refine the classifications above by excluding files in test/util/.
    - exclude: test/util
  # The default behavior is to tag all files created during the
  # build as `generated`. Results are hidden for generated code. You can tag 
  # further files as being generated by adding them to the `generated` section.
  generated:
    # Exclude all `*.c` files under the `ui/` directory from classification as 
    # generated code.
    - exclude: ui/**/*.c
    # By default, all files not checked into the repository are considered to be
    # 'generated'.
  # The default behavior is to tag library code as `library`. Results are hidden 
  # for library code. You can tag further files as being library code by adding them
  # to the `library` section.
  library:
    - exclude: 3rdparty/**/*.c
    - exclude: 3rdparty/**/*.cpp
  # The default behavior is to tag template files as `template`. Results are hidden 
  # for template files. You can tag further files as being template files by adding 
  # them to the `template` section.
  template:
    - exclude: path/to/template/code/**/*.c
  # Define your own category, for example: 'some_custom_category'.
  some_custom_category:
    # Classify all files in the top-level directory tools/ (or the top-level file 
    # called tools).
    - tools

#########################################################################################
# Use the `queries` block to change the default display of query results.               #
#########################################################################################

queries:
  # Start by hiding the results of all queries.
  - exclude: "*"
  # Then include all queries tagged 'security' and 'correctness', and with a severity of
  # 'error'.
  - include:           
      tags:
        - "security"
        - "correctness"           
      severity: "error"
  # Specifically hide the results of two queries.
  - exclude: cpp/use-of-goto
  - exclude: java/equals-on-unrelated-types
  # Refine by including the `java/command-line-injection` query.
  - include: java/command-line-injection

#########################################################################################
# Define changes to the default code extraction process.                                #
# Each block configures the extraction of a single language, and modifies actions in a  #
# named step. Every named step includes automatic default actions,                      #
# except for the 'prepare' step. The steps are performed in the following sequence:     #
# prepare                                                                               #
# after_prepare                                                                         #
# configure (C/C++ only)                                                                #
# python_setup (Python only)                                                            #
# before_index                                                                          #
# index                                                                                 #
##########################################################################################

#########################################################################################
# Environment variables available to the steps:                                         #
#########################################################################################

# LGTM_SRC
#   The root of the source tree.
# LGTM_WORKSPACE
#   An existing (initially empty) folder outside the source tree.
#   Used for temporary download and setup commands.

#########################################################################################
# Use the extraction block to define changes to the default code extraction process     #
# for one or more languages. The settings for each language are defined in a child      #
# block, with one or more steps.                                                        #
#########################################################################################

extraction: 
  # Define settings for C/C++ analysis
  #####################################
  cpp:
    # The `prepare` step exists for customization on LGTM.com only.
    prepare:
      # The `packages` section is valid for LGTM.com only. It names Ubuntu packages to
      # be installed.
      packages:
        - qtbase5-dev
        - qt5-default
        - qt5-qmake
        - qttools5-dev-tools
        - qtdeclarative5-dev
        - qtdeclarative5-dev-tools
        - libqt5sql5
        - libqt5sql5-sqlite
        - libsqlite3-dev
        - libmongoc-dev
        - libbson-dev
    # Add an `after-prepare` step if you need to run commands after the prepare step.
    # Each command should be listed on a separate line.
    # This step is useful for C/C++ analysis where you want to prepare the environment
    # for the `configure` step without changing the default behavior for that step. 
    after_prepare:
      - export GNU_MAKE=make
      - export GIT=true
    # The `configure` step generates build configuration files which the `index` step
    # then uses to build the codebase.
    configure:
      command:
        - ./configure --prefix=$PWD/local
    # Optional step. You should add a `before_index` step if you need to run commands
    # before the `index` step.
    before_index:
      - export BOOST_DIR=$LGTM_SRC/boost
      - export GTEST_DIR=$LGTM_SRC/googletest
      - export HUNSPELL_DIR=$LGTM_SRC/hunspell
      - export CRYPTOPP_DIR=$LGTM_SRC/cryptopp
    # The `index` step builds the code and extracts information during the build
    # process.
    index:
      # Override the autobuild process by specifying a list of custom build commands
      # to use instead. 
      build_command:
        - $GNU_MAKE -j2 -C src
      # Specify that all project or solution files should be used for extraction.
      # Default: false.
      all_solutions: false
