Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add: prefer-no-devDependencies #133

Merged
merged 2 commits into from Oct 6, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Expand Up @@ -23,6 +23,8 @@ This project adheres to [Semantic Versioning](http://semver.org/).

> Addresses [#93](https://github.com/tclindner/npm-package-json-lint/issues/93)

- New rule: [prefer-no-devDependencies](https://github.com/tclindner/npm-package-json-lint/wiki/prefer-no-devDependencies)]

### Changed
- [`name-format`](https://github.com/tclindner/npm-package-json-lint/wiki/name-format) now checks the following things:

Expand Down
5 changes: 3 additions & 2 deletions docs/rules.md
Expand Up @@ -197,8 +197,9 @@ Add the following to your `.npmpackagejsonlintrc.json` file.
* [prefer-property-order](rules/package-json-properties/prefer-property-order.md)


## Deprecated node rules
## Disallowed node rules
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍


> Generates an error if the node is present

* [prefer-no-engineStrict](rules/deprecated-nodes/prefer-no-engineStrict)
* [prefer-no-engineStrict](rules/disallowed-nodes/prefer-no-engineStrict)
* [prefer-no-devDependencies](rules/disallowed-nodes/prefer-no-devDependencies)
38 changes: 38 additions & 0 deletions docs/rules/disallowed-nodes/prefer-no-devDependencies.md
@@ -0,0 +1,38 @@
---
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you so much for adding docs 🎉

id: prefer-no-devDependencies
title: prefer-no-devDependencies
---

Enabling this rule will result in an error being generated if `devDependencies` is present.

## Example .npmpackagejsonlintrc configuration

```json
{
"rules": {
"prefer-no-devDependencies": "error"
}
}
```

## Rule Details

### *Incorrect* example(s)

```json
{
"devDependencies": "dummy-value"
}
```

### *Correct* example(s)

```json
{
"prefer-no-devDependencies": "error"
}
```

## History

* Introduced in version 4.0.0
20 changes: 20 additions & 0 deletions src/rules/prefer-no-devDependencies.js
@@ -0,0 +1,20 @@
const {exists} = require('../validators/property');
const LintIssue = require('./../LintIssue');

const lintId = 'prefer-no-devDependencies';
const nodeName = 'devDependencies';
const message = 'devDependencies should not be defined';
const ruleType = 'optionalObject';

const lint = (packageJsonData, severity) => {
if (exists(packageJsonData, nodeName)) {
return new LintIssue(lintId, severity, nodeName, message);
}

return true;
};

module.exports = {
lint,
ruleType
};
49 changes: 49 additions & 0 deletions test/unit/rules/prefer-no-devDependencies.test.js
@@ -0,0 +1,49 @@
const ruleModule = require('./../../../src/rules/prefer-no-devDependencies');
const property = require('../../../src/validators/property');

const {lint, ruleType} = ruleModule;

jest.mock('../../../src/validators/property');

const nodeName = 'devDependencies';

describe('prefer-no-devDependencies Unit Tests', () => {
describe('a rule type value should be exported', () => {
test('it should equal "optionalObject"', () => {
expect(ruleType).toStrictEqual('optionalObject');
});
});

describe('when package.json has devDependencies node', () => {
test('LintIssue object should be returned', () => {
property.exists.mockReturnValue(true);

const packageJsonData = {
devDependencies: 'dummy-value'
};
const response = lint(packageJsonData, 'error');

expect(response.lintId).toStrictEqual('prefer-no-devDependencies');
expect(response.severity).toStrictEqual('error');
expect(response.node).toStrictEqual(nodeName);
expect(response.lintMessage).toStrictEqual('devDependencies should not be defined');

expect(property.exists).toHaveBeenCalledTimes(1);
expect(property.exists).toHaveBeenCalledWith(packageJsonData, nodeName);
});
});

describe('when package.json does not have node', () => {
test('true should be returned', () => {
property.exists.mockReturnValue(false);

const packageJsonData = {};
const response = lint(packageJsonData, 'error');

expect(response).toBe(true);

expect(property.exists).toHaveBeenCalledTimes(1);
expect(property.exists).toHaveBeenCalledWith(packageJsonData, nodeName);
});
});
});
5 changes: 4 additions & 1 deletion website/i18n/en.json
Expand Up @@ -98,9 +98,12 @@
"rules/dependencies/prefer-tilde-version-devDependencies": {
"title": "prefer-tilde-version-devDependencies"
},
"rules/deprecated-nodes/prefer-no-engineStrict": {
"rules/disallowed-nodes/prefer-no-engineStrict": {
"title": "prefer-no-engineStrict"
},
"rules/disallowed-nodes/prefer-no-devDependencies": {
"title": "prefer-no-devDependencies"
},
"rules/format/description-format": {
"title": "description-format"
},
Expand Down