<commit_before># Tasks
It is easy to configure and activate tasks in GrumPHP.
Tasks live under their own namespace in the parameters part.
To activate a task, it is sufficient to add an empty task configuration:

```yaml
# grumphp.yml
parameters:
    tasks:
        behat: ~
        codeception: ~
        composer: ~
        git_blacklist: ~
        git_commit_message: ~
        grunt: ~
        jsonlint: ~
        phpcs: ~
        phpcsfixer: ~
        phpspec: ~
        phpunit: ~
        securitychecker: ~
        xmllint: ~
        yamllint: ~
```

Every task has it's own default configuration. It is possible to overwrite the parameters per task.

## Tasks

- [Behat](tasks/behat.md)
- [Codeception](tasks/codeception.md)
- [Composer](tasks/composer.md)
- [Git blacklist](tasks/git_blacklist.md)
- [Git commit message](tasks/git_commit_message.md)
- [Grunt](tasks/grunt.md)
- [JsonLint](tasks/jsonlint.md)
- [Phpcs](tasks/phpcs.md)
- [PHP-CS-Fixer](tasks/php_cs_fixer.md)
- [Phpspec](tasks/phpspec.md)
- [Phpunit](tasks/phpunit.md)
- [Security Checker](tasks/security_checker.md)
- [XmlLint](tasks/xmllint.md)
- [YamlLint](tasks/yamllint.md)

## Metadata

Every task has a pre-defined `metadata` key on which application specific options can be configured. 
For example:

```yaml
# grumphp.yml
parameters:
    tasks:
        anytask:
            metadata:
                blocking: true
                priority: 0
```

**priority**

*Default: 0*

This option can be used to specify the order in which the tasks will be executed.
The higher the priority, the sooner the task will be executed.


**blocking** (Not Implemented Yet!!)

*Default: true*

This option can be used to make a failing task non-blocking. 
By default all tasks will be marked as blocking.
When a task is non-blocking, the errors will be displayed but the tests will pass.


## Creating a custom task
<commit_msg>Remove "Not Implemented Yet" in blocking section docs<commit_after># Tasks
It is easy to configure and activate tasks in GrumPHP.
Tasks live under their own namespace in the parameters part.
To activate a task, it is sufficient to add an empty task configuration:

```yaml
# grumphp.yml
parameters:
    tasks:
        behat: ~
        codeception: ~
        composer: ~
        git_blacklist: ~
        git_commit_message: ~
        grunt: ~
        jsonlint: ~
        phpcs: ~
        phpcsfixer: ~
        phpspec: ~
        phpunit: ~
        securitychecker: ~
        xmllint: ~
        yamllint: ~
```

Every task has it's own default configuration. It is possible to overwrite the parameters per task.

## Tasks

- [Behat](tasks/behat.md)
- [Codeception](tasks/codeception.md)
- [Composer](tasks/composer.md)
- [Git blacklist](tasks/git_blacklist.md)
- [Git commit message](tasks/git_commit_message.md)
- [Grunt](tasks/grunt.md)
- [JsonLint](tasks/jsonlint.md)
- [Phpcs](tasks/phpcs.md)
- [PHP-CS-Fixer](tasks/php_cs_fixer.md)
- [Phpspec](tasks/phpspec.md)
- [Phpunit](tasks/phpunit.md)
- [Security Checker](tasks/security_checker.md)
- [XmlLint](tasks/xmllint.md)
- [YamlLint](tasks/yamllint.md)

## Metadata

Every task has a pre-defined `metadata` key on which application specific options can be configured. 
For example:

```yaml
# grumphp.yml
parameters:
    tasks:
        anytask:
            metadata:
                blocking: true
                priority: 0
```

**priority**

*Default: 0*

This option can be used to specify the order in which the tasks will be executed.
The higher the priority, the sooner the task will be executed.


**blocking**

*Default: true*

This option can be used to make a failing task non-blocking. 
By default all tasks will be marked as blocking.
When a task is non-blocking, the errors will be displayed but the tests will pass.


## Creating a custom task

{'fraction_non_alphanumeric': 0.10509721492380451, 'fraction_numerical': 0.0010509721492380452, 'mean_word_length': 2.986387434554974, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 4}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6289238', 'n_tokens_mistral': 1249, 'n_tokens_neox': 1205, 'n_words': 386}