diff --git a/deno.jsonc b/deno.jsonc index f0db3c0..b7c530a 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -2,6 +2,7 @@ "tasks": { "clean": "deno run -A tasks.ts clean", "format": "deno run -A tasks.ts format", + "lint": "deno run -A tasks.ts lint", "start": "deno run -A tasks.ts start", "test": "deno run -A tasks.ts test", "report": "deno run -A tasks.ts report", @@ -25,6 +26,7 @@ "singleQuote": true }, "compilerOptions": { - "strict": true + "strict": true, + "verbatimModuleSyntax": true } } \ No newline at end of file diff --git a/src/build/common/comment.ts b/src/build/common/comment.ts index 2046216..774881b 100644 --- a/src/build/common/comment.ts +++ b/src/build/common/comment.ts @@ -38,16 +38,16 @@ function FromArray(parser: Runtime.IArray): string { function FromConst(parser: Runtime.IConst): string { return `'${Escape(parser.const)}'` } -function FromBigInt(parser: Runtime.IBigInt): string { +function FromBigInt(_parser: Runtime.IBigInt): string { return `` } -function FromIdent(parser: Runtime.IIdent): string { +function FromIdent(_parser: Runtime.IIdent): string { return `` } -function FromInteger(parser: Runtime.IInteger): string { +function FromInteger(_parser: Runtime.IInteger): string { return `` } -function FromNumber(parser: Runtime.INumber): string { +function FromNumber(_parser: Runtime.INumber): string { return `` } function FromOptional(parser: Runtime.IOptional): string { @@ -56,10 +56,10 @@ function FromOptional(parser: Runtime.IOptional): string { function FromRef(parser: Runtime.IRef): string { return `${parser.ref}` } -function FromRest(parser: Runtime.IRest): string { +function FromRest(_parser: Runtime.IRest): string { return `string` } -function FromString(parser: Runtime.IString): string { +function FromString(_parser: Runtime.IString): string { return `` } function FromTuple(parser: Runtime.ITuple): string { @@ -68,16 +68,16 @@ function FromTuple(parser: Runtime.ITuple): string { function FromUnion(parser: Runtime.IUnion): string { return parser.parsers.map((parser) => `${FromParser(parser)}`).join(' | ') } -function FromUnsignedInteger(parser: Runtime.IUnsignedInteger): string { +function FromUnsignedInteger(_parser: Runtime.IUnsignedInteger): string { return `` } -function FromUnsignedNumber(parser: Runtime.IUnsignedNumber): string { +function FromUnsignedNumber(_parser: Runtime.IUnsignedNumber): string { return `` } -function FromUntil_1(parser: Runtime.IUntil_1): string { +function FromUntil_1(_parser: Runtime.IUntil_1): string { return `string` } -function FromUntil(parser: Runtime.IUntil): string { +function FromUntil(_parser: Runtime.IUntil): string { return `string` } function FromParser(parser: Runtime.IParser): string { diff --git a/src/build/project.ts b/src/build/project.ts index b87f666..58e6a70 100644 --- a/src/build/project.ts +++ b/src/build/project.ts @@ -32,7 +32,7 @@ import * as Runtime from '../runtime/index.ts' import { BuildStaticParse, BuildStaticMapping } from './static/index.ts' import { BuildRuntimeParse, BuildRuntimeMapping } from './runtime/index.ts' import { CompileComment } from './common/index.ts' -import { DefaultOptions, Options } from './options.ts' +import { DefaultOptions, type Options } from './options.ts' // ------------------------------------------------------------------ // Header diff --git a/src/runtime/parse.ts b/src/runtime/parse.ts index 14fc5f1..c5d6bae 100644 --- a/src/runtime/parse.ts +++ b/src/runtime/parse.ts @@ -84,7 +84,7 @@ export function Parse(context: IProperties, parser: Pars /** Parses input using the given Parser */ export function Parse(parser: Parser, content: string): [] | [StaticParser, string] /** Parses input using the given Parser */ -export function Parse(...args: any[]): never { +export function Parse(...args: unknown[]): never { const [context, parser, input] = Arguments.Match<[IProperties, IParser, string]>(args, { 3: (context, parser, input) => [context, parser, input], 2: (parser, input) => [{}, parser, input] diff --git a/src/runtime/parser.ts b/src/runtime/parser.ts index 240b9fc..4b5dd66 100644 --- a/src/runtime/parser.ts +++ b/src/runtime/parser.ts @@ -26,6 +26,7 @@ THE SOFTWARE. ---------------------------------------------------------------------------*/ +// deno-lint-ignore-file no-explicit-any // deno-fmt-ignore-file export type IProperties = Record diff --git a/src/token/internal/guard.ts b/src/token/internal/guard.ts index eec0ac1..2f64685 100644 --- a/src/token/internal/guard.ts +++ b/src/token/internal/guard.ts @@ -38,3 +38,6 @@ export function IsString(value: unknown): value is string { export function IsEqual(left: unknown, right: unknown): boolean { return left === right } +export function TakeLeft unknown, False extends () => unknown>(array: T[], true_: True, false_: False): ReturnType | ReturnType { + return (IsEqual(array.length, 0) ? false_() : true_(array[0], array.slice(1))) as never +} diff --git a/src/token/internal/take.ts b/src/token/internal/take.ts index b0e4441..6710ab6 100644 --- a/src/token/internal/take.ts +++ b/src/token/internal/take.ts @@ -62,15 +62,11 @@ export function Take(variants: // ---------------------------------------------------------------- // Symmetric // ---------------------------------------------------------------- - // const [left, ...right] = variants - // return ( - // IsString(left) - // ? (() => { - // const result = TakeVariant(left, input) - // return IsEqual(result.length, 2) ? result : Take(right, input) - // })() - // : [] - // ) as never + // return Guard.TakeLeft(variants, (valueLeft, valueRight) => + // Match(TakeVariant(valueLeft, input), (take, rest) => + // [take, rest], + // () => Take(valueRight, input)), + // () => []) as never // ---------------------------------------------------------------- // Inline // ---------------------------------------------------------------- diff --git a/src/token/until.ts b/src/token/until.ts index 28f5899..95f089d 100644 --- a/src/token/until.ts +++ b/src/token/until.ts @@ -26,10 +26,11 @@ THE SOFTWARE. ---------------------------------------------------------------------------*/ +// deno-coverage-ignore-start - parsebox tested // deno-fmt-ignore-file import { Match } from './internal/match.ts' -import { IsEqual, IsString } from './internal/guard.ts' +import { IsEqual, TakeLeft } from './internal/guard.ts' // ------------------------------------------------------------------ // TakeOne @@ -54,16 +55,12 @@ type TIsInputMatchSentinal = ( : false ) function IsInputMatchSentinal(end: [...End], input: Input): TIsInputMatchSentinal { - const [left, ...right] = end - return ( - IsString(left) - ? input.startsWith(left) - ? true - : IsInputMatchSentinal(right, input) - : false - ) as never + return TakeLeft(end, (left, right) => + input.startsWith(left) + ? true + : IsInputMatchSentinal(right, input), + () => false) as never } - // ------------------------------------------------------------------ // Until // @@ -94,3 +91,4 @@ export function Until(end: [...End], : Until(end, Rest, `${result}${One}`) // fail: advance + 1 , () => []) as never } +// deno-coverage-ignore-stop \ No newline at end of file diff --git a/tasks.ts b/tasks.ts index 5b30ef2..6c6509f 100644 --- a/tasks.ts +++ b/tasks.ts @@ -1,50 +1,43 @@ import { Task } from 'tasksmith' -const VERSION = '0.11.3' +const VERSION = '0.11.4' // ------------------------------------------------------------------ // Clean // ------------------------------------------------------------------ -Task.run('clean', async () => { - await Task.folder('target').delete() -}) +Task.run('clean', () => Task.folder('target').delete()) // ------------------------------------------------------------------ // Format // ------------------------------------------------------------------ -Task.run('format', async () => { - await Task.shell('deno fmt src test') -}) +Task.run('format', () => Task.shell('deno fmt src test')) +// ------------------------------------------------------------------ +// Lint +// ------------------------------------------------------------------ +Task.run('lint', () => Task.shell('deno lint src')) // ------------------------------------------------------------------ // Start // ------------------------------------------------------------------ -Task.run('start', async () => { - await Task.shell('deno run -A --watch example/index.ts') -}) +Task.run('start', () => Task.shell('deno run -A --watch example/index.ts')) // ------------------------------------------------------------------ // Test // ------------------------------------------------------------------ -Task.run('test', async (filter: string = '') => { - await Task.test.run(['test/parsebox'], { filter }) -}) +Task.run('test', async (filter: string = '') => + Task.shell('deno lint src').catch(() => null).then(() => + Task.test.run(['test/parsebox'], { filter })) +) // ------------------------------------------------------------------ // Fast // ------------------------------------------------------------------ -Task.run('fast', async (filter: string = '') => { - await Task.test.run(['test/parsebox'], { - watch: true, noCheck: true, filter, - }) -}) +Task.run('fast', async (filter: string = '') => Task.test.run(['test/parsebox'], { watch: true, noCheck: true, filter })) // ------------------------------------------------------------------ // Report // ------------------------------------------------------------------ -Task.run('report', async () => { - await Task.test.report(['test/parsebox']) -}) +Task.run('report', async () => Task.test.report(['test/parsebox'])) // ------------------------------------------------------------------ // Build // ------------------------------------------------------------------ Task.run('build', () => Task.build.dual('src', { - compiler: '6.0.2', + compiler: '6.0.3', outdir: 'target/build', additional: ['license', 'readme.md'], packageJson: {