From 57ebe9b9b1f05641fc1226bee679e4a00fa155a9 Mon Sep 17 00:00:00 2001 From: Josh Gross Date: Wed, 15 Mar 2023 15:58:44 -0400 Subject: [PATCH] Lint the workflow parser package --- workflow-parser/src/model/convert.test.ts | 1 + .../src/templates/json-object-reader.ts | 14 +++++++------- workflow-parser/src/templates/template-context.ts | 6 +++--- workflow-parser/src/templates/template-reader.ts | 1 + workflow-parser/src/templates/trace-writer.ts | 12 +++++++++--- workflow-parser/src/test-utils/null-trace.ts | 8 ++------ .../src/workflows/yaml-object-reader.ts | 7 +++---- 7 files changed, 26 insertions(+), 23 deletions(-) diff --git a/workflow-parser/src/model/convert.test.ts b/workflow-parser/src/model/convert.test.ts index 05cc026..cd7f495 100644 --- a/workflow-parser/src/model/convert.test.ts +++ b/workflow-parser/src/model/convert.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-non-null-assertion */ import {nullTrace} from "../test-utils/null-trace"; import {parseWorkflow} from "../workflows/workflow-parser"; import {convertWorkflowTemplate, ErrorPolicy} from "./convert"; diff --git a/workflow-parser/src/templates/json-object-reader.ts b/workflow-parser/src/templates/json-object-reader.ts index ab37780..aa53aaf 100644 --- a/workflow-parser/src/templates/json-object-reader.ts +++ b/workflow-parser/src/templates/json-object-reader.ts @@ -9,7 +9,7 @@ export class JSONObjectReader implements ObjectReader { public constructor(fileId: number | undefined, input: string) { this._fileId = fileId; - const value = JSON.parse(input); + const value: unknown = JSON.parse(input); this._generator = this.getParseEvents(value, true); this._current = this._generator.next(); } @@ -76,7 +76,7 @@ export class JSONObjectReader implements ObjectReader { public validateEnd(): void { if (!this._current.done) { - const parseEvent = this._current.value as ParseEvent; + const parseEvent = this._current.value; if (parseEvent.type === EventType.DocumentEnd) { this._current = this._generator.next(); return; @@ -88,7 +88,7 @@ export class JSONObjectReader implements ObjectReader { public validateStart(): void { if (!this._current.done) { - const parseEvent = this._current.value as ParseEvent; + const parseEvent = this._current.value; if (parseEvent.type === EventType.DocumentStart) { this._current = this._generator.next(); return; @@ -101,7 +101,7 @@ export class JSONObjectReader implements ObjectReader { /** * Returns all tokens (depth first) */ - private *getParseEvents(value: any, root?: boolean): Generator { + private *getParseEvents(value: unknown, root?: boolean): Generator { if (root) { yield new ParseEvent(EventType.DocumentStart, undefined); } @@ -124,9 +124,9 @@ export class JSONObjectReader implements ObjectReader { yield new ParseEvent(EventType.Literal, new NullToken(this._fileId, undefined, undefined)); } // array - else if (Object.prototype.hasOwnProperty.call(value, "length")) { + else if (Array.isArray(value)) { yield new ParseEvent(EventType.SequenceStart, new SequenceToken(this._fileId, undefined, undefined)); - for (const item of value as []) { + for (const item of value) { for (const e of this.getParseEvents(item)) { yield e; } @@ -138,7 +138,7 @@ export class JSONObjectReader implements ObjectReader { yield new ParseEvent(EventType.MappingStart, new MappingToken(this._fileId, undefined, undefined)); for (const key of Object.keys(value)) { yield new ParseEvent(EventType.Literal, new StringToken(this._fileId, undefined, key, undefined)); - for (const e of this.getParseEvents(value[key])) { + for (const e of this.getParseEvents(value[key as keyof typeof value])) { yield e; } } diff --git a/workflow-parser/src/templates/template-context.ts b/workflow-parser/src/templates/template-context.ts index 0b02c25..2e1db12 100644 --- a/workflow-parser/src/templates/template-context.ts +++ b/workflow-parser/src/templates/template-context.ts @@ -25,7 +25,7 @@ export class TemplateContext { public readonly errors: TemplateValidationErrors; public readonly schema: TemplateSchema; public readonly trace: TraceWriter; - public readonly state: {[key: string]: any} = {}; + public readonly state: {[key: string]: unknown} = {}; public constructor(errors: TemplateValidationErrors, schema: TemplateSchema, trace: TraceWriter) { this.errors = errors; @@ -47,7 +47,7 @@ export class TemplateContext { const token = tokenOrFileId as TemplateToken | undefined; const range = tokenRange || token?.range; const prefix = this.getErrorPrefix(token?.file ?? (tokenOrFileId as number | undefined), token?.line, token?.col); - const message = (err as Error | undefined)?.message ?? `${err}`; + const message = (err as Error | undefined)?.message ?? String(err); const e = new TemplateValidationError(message, prefix, undefined, range); this.errors.add(e); @@ -84,7 +84,7 @@ export class TemplateContext { } private getErrorPrefix(fileId?: number, line?: number, column?: number): string { - const fileName = fileId !== undefined ? this.getFileName(fileId as number) : undefined; + const fileName = fileId !== undefined ? this.getFileName(fileId) : undefined; if (fileName) { if (line !== undefined && column !== undefined) { return `${fileName} (Line: ${line}, Col: ${column})`; diff --git a/workflow-parser/src/templates/template-reader.ts b/workflow-parser/src/templates/template-reader.ts index 02df3d7..abeb362 100644 --- a/workflow-parser/src/templates/template-reader.ts +++ b/workflow-parser/src/templates/template-reader.ts @@ -1,4 +1,5 @@ // template-reader *just* does schema validation +/* eslint-disable @typescript-eslint/no-non-null-assertion */ import {ObjectReader} from "./object-reader"; import {TemplateSchema} from "./schema"; diff --git a/workflow-parser/src/templates/trace-writer.ts b/workflow-parser/src/templates/trace-writer.ts index 2ac9a0c..8374117 100644 --- a/workflow-parser/src/templates/trace-writer.ts +++ b/workflow-parser/src/templates/trace-writer.ts @@ -7,9 +7,15 @@ export interface TraceWriter { } export class NoOperationTraceWriter implements TraceWriter { - public error(message: string): void {} + public error(): void { + // do nothing + } - public info(message: string): void {} + public info(): void { + // do nothing + } - public verbose(message: string): void {} + public verbose(): void { + // do nothing + } } diff --git a/workflow-parser/src/test-utils/null-trace.ts b/workflow-parser/src/test-utils/null-trace.ts index 08aba62..b291500 100644 --- a/workflow-parser/src/test-utils/null-trace.ts +++ b/workflow-parser/src/test-utils/null-trace.ts @@ -1,7 +1,3 @@ -import {TraceWriter} from "../templates/trace-writer"; +import {NoOperationTraceWriter} from "../templates/trace-writer"; -export const nullTrace: TraceWriter = { - info: x => {}, - verbose: x => {}, - error: x => {} -}; +export const nullTrace = new NoOperationTraceWriter(); diff --git a/workflow-parser/src/workflows/yaml-object-reader.ts b/workflow-parser/src/workflows/yaml-object-reader.ts index 7b72c8a..ce93d9a 100644 --- a/workflow-parser/src/workflows/yaml-object-reader.ts +++ b/workflow-parser/src/workflows/yaml-object-reader.ts @@ -3,7 +3,6 @@ import type {LinePos} from "yaml/dist/errors"; import type {NodeBase} from "yaml/dist/nodes/Node"; import {ObjectReader} from "../templates/object-reader"; import {EventType, ParseEvent} from "../templates/parse-event"; -import {TemplateContext} from "../templates/template-context"; import { BooleanToken, LiteralToken, @@ -72,7 +71,7 @@ export class YamlObjectReader implements ObjectReader { } if (isScalar(node)) { - yield new ParseEvent(EventType.Literal, YamlObjectReader.getLiteralToken(this.fileId, range, node as Scalar)); + yield new ParseEvent(EventType.Literal, YamlObjectReader.getLiteralToken(this.fileId, range, node)); } if (isPair(node)) { @@ -191,7 +190,7 @@ export class YamlObjectReader implements ObjectReader { public validateEnd(): void { if (!this._current.done) { - const parseEvent = this._current.value as ParseEvent; + const parseEvent = this._current.value; if (parseEvent.type === EventType.DocumentEnd) { this._current = this._generator.next(); return; @@ -207,7 +206,7 @@ export class YamlObjectReader implements ObjectReader { } if (!this._current.done) { - const parseEvent = this._current.value as ParseEvent; + const parseEvent = this._current.value; if (parseEvent.type === EventType.DocumentStart) { this._current = this._generator.next(); return;