* Asserts that a @param tag has a corresponding function definition.
( document: DocNodeWithJsDoc<DocNodeFunction | ClassMethodDef>, param: JsDocTagParam, )
| 94 | * Asserts that a @param tag has a corresponding function definition. |
| 95 | */ |
| 96 | function assertHasParamDefinition( |
| 97 | document: DocNodeWithJsDoc<DocNodeFunction | ClassMethodDef>, |
| 98 | param: JsDocTagParam, |
| 99 | ) { |
| 100 | const paramDoc = document.functionDef.params.find((paramDoc) => { |
| 101 | if (paramDoc.kind === "identifier") { |
| 102 | return paramDoc.name === param.name; |
| 103 | } else if (paramDoc.kind === "rest" && paramDoc.arg.kind === "identifier") { |
| 104 | return paramDoc.arg.name === param.name; |
| 105 | } else if ( |
| 106 | paramDoc.kind === "assign" && paramDoc.left.kind === "identifier" |
| 107 | ) { |
| 108 | return paramDoc.left.name === param.name; |
| 109 | } |
| 110 | return false; |
| 111 | }); |
| 112 | |
| 113 | assert( |
| 114 | paramDoc !== undefined, |
| 115 | `@param ${param.name} must have a corresponding function parameter definition.`, |
| 116 | document, |
| 117 | ); |
| 118 | } |
| 119 | |
| 120 | function assertHasParamTag( |
| 121 | document: { jsDoc: JsDoc; location: Location }, |
no test coverage detected