build:
  nodes:
    analysis:
      environment:
        mysql: false
        postgresql: false
        elasticsearch: false
        redis: false
        memcached: false
        neo4j: false
        rabbitmq: false
        mongodb: false
        php:
          version: 7.2
      cache:
        disabled: false
        directories:
          - ~/.composer/cache
      project_setup:
        override: true
      tests:
        override:
          - php-scrutinizer-run
          -
            command: 'vendor/bin/phpunit --testsuite=unit --coverage-clover=coverage.xml'
            coverage:
              file: 'coverage.xml'
              format: 'clover'
checks:
  php:
    code_rating: true
    duplication: false
    argument_type_checks: true
    assignment_of_null_return: true
    avoid_conflicting_incrementers: true
    avoid_useless_overridden_methods: true
    catch_class_exists: true
    closure_use_modifiable: true
    closure_use_not_conflicting: true
    deprecated_code_usage: true
    method_calls_on_non_object: true
    missing_arguments: true
    no_duplicate_arguments: true
    no_non_implemented_abstract_methods: true
    no_property_on_interface: true
    parameter_non_unique: true
    precedence_in_conditions: true
    precedence_mistakes: true
    require_php_tag_first: true
    security_vulnerabilities: true
    sql_injection_vulnerabilities: true
    too_many_arguments: true
    unreachable_code: true
    unused_methods: true
    unused_parameters: true
    unused_properties: true
    unused_variables: true
    use_statement_alias_conflict: true
    useless_calls: true
    variable_existence: true
    verify_access_scope_valid: true
    verify_argument_usable_as_reference: true
    verify_property_names: true
    uppercase_constants: true
    simplify_boolean_return: true
    return_doc_comments: true
    remove_extra_empty_lines: true
    properties_in_camelcaps: true
    phpunit_assertions: true
    parameters_in_camelcaps: true
    parameter_doc_comments: true
    overriding_parameter: true
    optional_parameters_at_the_end: true
    no_short_variable_names:
      minimum: '2'
    no_long_variable_names:
      maximum: '25'
    no_goto: true
    newline_at_end_of_file: true
    more_specific_types_in_doc_comments: false
    function_in_camel_caps: true
    encourage_single_quotes: true
    encourage_postdec_operator: true
    classes_in_camel_caps: true
    check_method_contracts:
      verify_interface_like_constraints: true
      verify_documented_constraints: true
      verify_parent_constraints: true
    avoid_unnecessary_concatenation: true
    avoid_perl_style_comments: true
    avoid_multiple_statements_on_same_line: true
    align_assignments: true
    deadlock_detection_in_loops: true
    use_self_instead_of_fqcn: true
    single_namespace_per_use: true
    side_effects_or_types: true
    require_scope_for_properties: true
    require_scope_for_methods: true
    psr2_switch_declaration: true
    psr2_class_declaration: true
    property_assignments: true
    parse_doc_comments: true
    overriding_private_members: true
    no_underscore_prefix_in_properties: true
    no_underscore_prefix_in_methods: true
    no_trait_type_hints: true
    no_trailing_whitespace: true
    no_short_open_tag: true
    no_global_keyword: true
    no_exit: true
    no_eval: true
    no_error_suppression: true
    no_empty_statements: true
    no_debug_code: true
    no_commented_out_code: true
    no_unnecessary_if: true
    return_in_constructor: true
    php5_style_constructor: true
    instanceof_class_exists: true
    foreach_traversable: true
    call_to_parent_method: true
    blank_line_after_namespace_declaration: true
    avoid_usage_of_logical_operators: true
    avoid_superglobals: true
    avoid_length_functions_in_loops: true
    avoid_duplicate_types: true
    avoid_closing_tag: true
    avoid_corrupting_byteorder_marks: true
    avoid_aliased_php_functions: true
    encourage_shallow_comparison: true
build_failure_conditions:
  - 'elements.rating(<= C).new.exists'                            # No new classes/methods with a rating of C or worse allowed
  - 'issues.severity(>= MAJOR).new.exists'                        # New issues of major or higher severity
  - 'project.metric_change("scrutinizer.test_coverage", < -0.01)' # Code Coverage decreased from previous inspection
  - 'patches.label("Unused Use Statements").new.exists'           # No new unused imports patches allowed
                    # language: php