Skip to content

Commit 71b312e

Browse files
authored
feat(rulesets): add unused components server rule (stoplightio#2097)
1 parent 2d9abaf commit 71b312e

File tree

3 files changed

+65
-0
lines changed

3 files changed

+65
-0
lines changed

docs/reference/asyncapi-rules.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,3 +369,15 @@ that acts as a library (a container storing reusable objects, leveraged by other
369369
specifications that reference those objects).
370370

371371
**Recommended:** Yes
372+
373+
### asyncapi-unused-components-server
374+
375+
Potential unused reusable `server` entry has been detected.
376+
377+
<!-- theme: warning -->
378+
379+
_Warning:_ This rule may identify false positives when linting a specification
380+
that acts as a library (a container storing reusable objects, leveraged by other
381+
specifications that reference those objects).
382+
383+
**Recommended:** Yes
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { DiagnosticSeverity } from '@stoplight/types';
2+
import produce from 'immer';
3+
import testRule from './__helpers__/tester';
4+
5+
const document = {
6+
asyncapi: '2.0.0',
7+
servers: {
8+
test: {
9+
$ref: '#/components/servers/externallyDefinedServer',
10+
},
11+
},
12+
channels: {},
13+
components: {
14+
servers: {
15+
externallyDefinedServer: {},
16+
},
17+
},
18+
};
19+
20+
testRule('asyncapi-unused-components-server', [
21+
{
22+
name: 'valid case',
23+
document,
24+
errors: [],
25+
},
26+
27+
{
28+
name: 'components.servers contains unreferenced objects',
29+
document: produce(document, (draft: any) => {
30+
delete draft.servers['test'];
31+
}),
32+
errors: [
33+
{
34+
message: 'Potentially unused components server has been detected.',
35+
path: ['components', 'servers', 'externallyDefinedServer'],
36+
severity: DiagnosticSeverity.Warning,
37+
},
38+
],
39+
},
40+
]);

packages/rulesets/src/asyncapi/index.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,5 +381,18 @@ export default {
381381
},
382382
},
383383
},
384+
'asyncapi-unused-components-server': {
385+
description: 'Potentially unused components server has been detected.',
386+
recommended: true,
387+
type: 'style',
388+
resolved: false,
389+
given: '$.components.servers',
390+
then: {
391+
function: unreferencedReusableObject,
392+
functionOptions: {
393+
reusableObjectsLocation: '#/components/servers',
394+
},
395+
},
396+
},
384397
},
385398
};

0 commit comments

Comments
 (0)