Skip to content

fix: Message scope validation for forbidden scopes is incorrect #3779

Closed
@joberstein

Description

@joberstein

Reference documentation: https://github.com/conventional-changelog/commitlint/blob/36c58e3d0ba677280a17388cb5bbf58f4627a56a/docs/reference-rules.md#scope-enum

Expected Behavior

If any of the forbidden ('never') scopes are supplied as message scopes, the scope-enum validator should fail. Otherwise, it should pass.

Current Behavior

The scope-enum validator fails only if all of the message scopes are listed as forbidden ('never') scopes. Otherwise, it passes.

Affected packages

  • cli
  • core
  • prompt
  • config-angular

Possible Solution

Rework the scope-enum 'never' validation to be it's own condition, not simply the negation of the 'always' validation.

Steps to Reproduce

{
    "rules": {
        "scope-enum": [2, "never", [
            "action",
        ]]
    },
};

Test 1:
- Command: echo 'fix(different): Test message.' | npx commitlint@18.4.2 -V
- Actual Result: Pass
- Expected Result: Pass

Test 2:
- Command: echo 'fix(action): Test message.' | npx commitlint@18.4.2 -V
- Actual Result: Failure
- Expected Result: Failure

Test 3:
- Command: echo 'fix(action,other): Test message.' | npx commitlint@18.4.2 -V
- Actual Result: Pass
- Expected Result: Failure ('action' is a forbidden scope)

---

{
    "rules": {
        "scope-enum": [2, "never", [
            "action",
            "other"
        ]]
    },
};

Test 1:
- Command: echo 'fix(action): Test message.' | npx commitlint@18.4.2 -V
- Actual Result: Failure
- Expected Result: Failure

Test 2:
- Command: echo 'fix(action,other): Test message.' | npx commitlint@18.4.2 -V
- Actual Result: Failure 
- Expected Result: Failure

Test 3:
- Command: echo 'fix(action,different): Test message.' | npx commitlint@18.4.2 -V
- Actual Result: Pass
- Expected Result: Failure ('action' is a forbidden scope)

Test 4:
- Command: echo 'fix(action,different,other): Test message.' | npx commitlint@18.4.2 -V
- Actual Result: Failure
- Expected Result: Failure

---

{
    "rules": {
        "scope-enum": [2, "never", []]
    },
};

Test 1:
- Command: echo 'fix(action): Test message.' | npx commitlint@18.4.2 -V
- Actual Result: Fail
- Expected Result: Pass (there aren't any forbidden scopes)

Context

Discovered in PR: #3725 as a result of failing tests.

commitlint --version

@commitlint/rules@18.4.0

git --version

2.41.0

node --version

20.9.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions