Skip to content

Commit 6fdf839

Browse files
author
David Brockman Smoliansky
committed
feat(rule): add no-logger-format-payload
# Remove use of the `formatPayload` function (no-logger-format-payload) This rule is meant to help us remove all usage of `logger.formatPayload(data)`. This rule is fixable. Use `--fix`... ## Examples ```js logger.info(logger.formatPayload({ foo: 123 }), 'my log message'); // will be transformed to: logger.info({ foo: 123 }, 'my log message'); ``` ```js foo_logger.info(foo_logger.formatPayload({ foo: 123 }), 'my log message'); // will be transformed to: foo_logger.info({ foo: 123 }, 'my log message'); ``` ```js const payload = logger.formatPayload({ foo: 123 }); logger.info(payload, 'my log message'); // will be transformed to: const payload = { foo: 123 }; logger.info(payload, 'my log message'); ``` ## Examples of valid code These will not trigger the linter ```js logger.info({ foo: 123 }, 'my log message'); const fn = logger.formatPayload; someOtherThing.formatPayload({}); formatPayload({}); ```
1 parent d1f3baa commit 6fdf839

File tree

3 files changed

+107
-0
lines changed

3 files changed

+107
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Remove use of the `formatPayload` function (no-logger-format-payload)
2+
3+
This rule is meant to help us remove all usage of `logger.formatPayload(data)`.
4+
5+
This rule is fixable. Use `--fix`...
6+
7+
## Examples
8+
9+
```js
10+
logger.info(logger.formatPayload({ foo: 123 }), 'my log message');
11+
// will be transformed to:
12+
logger.info({ foo: 123 }, 'my log message');
13+
```
14+
15+
```js
16+
foo_logger.info(foo_logger.formatPayload({ foo: 123 }), 'my log message');
17+
// will be transformed to:
18+
foo_logger.info({ foo: 123 }, 'my log message');
19+
```
20+
21+
```js
22+
const payload = logger.formatPayload({ foo: 123 });
23+
logger.info(payload, 'my log message');
24+
// will be transformed to:
25+
const payload = { foo: 123 };
26+
logger.info(payload, 'my log message');
27+
```
28+
29+
## Examples of valid code
30+
31+
These will not trigger the linter
32+
33+
```js
34+
logger.info({ foo: 123 }, 'my log message');
35+
36+
const fn = logger.formatPayload;
37+
38+
someOtherThing.formatPayload({});
39+
40+
formatPayload({});
41+
```

lib/rules/no-logger-format-payload.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
"use strict";
2+
3+
module.exports = {
4+
meta: {
5+
fixable: "code",
6+
schema: []
7+
},
8+
create: function(context) {
9+
return {
10+
"CallExpression[callee.type=MemberExpression][callee.object.name=/[Ll]og/][callee.property.name='formatPayload']": function(node) {
11+
context.report({
12+
node: node,
13+
message: "Use of the formatPayload function from @springworks/logger-factory",
14+
fix: function(fixer) {
15+
return fixer.replaceText(node, context.getSourceCode().getText(node.arguments[0]));
16+
}
17+
});
18+
}
19+
};
20+
}
21+
};
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
"use strict";
2+
3+
var rule = require("../../../lib/rules/no-logger-format-payload");
4+
var RuleTester = require("eslint").RuleTester;
5+
6+
var message = "Use of the formatPayload function from @springworks/logger-factory";
7+
8+
var ruleTester = new RuleTester();
9+
ruleTester.run("no-logger-format-payload", rule, {
10+
11+
valid: [
12+
{ code: "logger.info({ foo: 123 }, 'my log message');" },
13+
{ code: "var fn = logger.formatPayload" },
14+
{ code: "someOtherThing.formatPayload({})" },
15+
{ code: "formatPayload({})" },
16+
],
17+
18+
invalid: [
19+
{
20+
code: "logger.info(logger.formatPayload({ foo: 123 }), 'my log message');",
21+
output: "logger.info({ foo: 123 }, 'my log message');",
22+
errors: [{ message: message, type: "CallExpression" }],
23+
},
24+
{
25+
code: "log.info(log.formatPayload({ foo: 123 }), 'my log message');",
26+
output: "log.info({ foo: 123 }, 'my log message');",
27+
errors: [{ message: message, type: "CallExpression" }],
28+
},
29+
{
30+
code: "foo_logger.info(foo_logger.formatPayload({ foo: 123 }), 'my log message');",
31+
output: "foo_logger.info({ foo: 123 }, 'my log message');",
32+
errors: [{ message: message, type: "CallExpression" }],
33+
},
34+
{
35+
code: "fooLogger.info(fooLogger.formatPayload({ foo: 123 }), 'my log message');",
36+
output: "fooLogger.info({ foo: 123 }, 'my log message');",
37+
errors: [{ message: message, type: "CallExpression" }],
38+
},
39+
{
40+
code: "var payload = logger.formatPayload({ foo: 123 }); logger.info(payload, 'my log message');",
41+
output: "var payload = { foo: 123 }; logger.info(payload, 'my log message');",
42+
errors: [{ message: message, type: "CallExpression" }],
43+
},
44+
],
45+
});

0 commit comments

Comments
 (0)