-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
refactor: cleaner lint results; make anys explicit #116
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,23 @@ | ||
/* | ||
* Copyright 2024 Hypergiant Galactic Systems Inc. All rights reserved. | ||
* This file is licensed to you under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. You may obtain a copy | ||
* of the License at https://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software distributed under | ||
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS | ||
* OF ANY KIND, either express or implied. See the License for the specific language | ||
* governing permissions and limitations under the License. | ||
*/ | ||
|
||
/* eslint-disable @typescript-eslint/no-explicit-any */ | ||
import type { UnaryFunction } from '@/types'; | ||
|
||
// https://stackoverflow.com/questions/49310886/typing-compose-function-in-typescript-flow-compose#answer-73082627 | ||
|
||
// If its a list of functions, last being Unary | ||
type ComposeParams<Fns> = Fns extends readonly [ | ||
// biome-ignore lint/suspicious/noExplicitAny: <explanation> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @belsrc similarly, are you able to give some justification / explanation for these ignores? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can't most of these just be converted to There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. IIRC @belsrc mentioned some issues with using |
||
...any[], | ||
infer Last extends UnaryFunction, | ||
] | ||
|
@@ -21,10 +34,12 @@ type Composable<Fn> = | |
Fn extends readonly [UnaryFunction] | ||
? Fn | ||
: // if its a list of Unary funcs (ignoring the first) | ||
// biome-ignore lint/suspicious/noExplicitAny: <explanation> | ||
Fn extends readonly [any, ...infer Rest extends readonly UnaryFunction[]] | ||
? // Start building the list of func type by using the return type of the first in Rest | ||
// as the arg of the next in line and recursively spread the rest (doing the same thing) | ||
// The first is ignored but handled by the top level ComposeReturn | ||
// biome-ignore lint/suspicious/noExplicitAny: <explanation> | ||
readonly [(arg: ComposeReturn<Rest>) => any, ...Composable<Rest>] | ||
: never; | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,27 @@ | ||
export type UnaryFunction = (x: any) => any; | ||
/* | ||
* Copyright 2024 Hypergiant Galactic Systems Inc. All rights reserved. | ||
* This file is licensed to you under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. You may obtain a copy | ||
* of the License at https://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software distributed under | ||
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS | ||
* OF ANY KIND, either express or implied. See the License for the specific language | ||
* governing permissions and limitations under the License. | ||
*/ | ||
|
||
export type Accumulator<T, R> = (acc: R, x: T) => R; | ||
|
||
export type ArrayElementType<T> = T extends (infer E)[] ? E : T; | ||
|
||
// biome-ignore lint/suspicious/noExplicitAny: <explanation> | ||
export type Callable = (...all: any) => any; | ||
|
||
export type Comparator<T> = (x: T) => boolean; | ||
|
||
export type Predicate<T> = (x: T, idx?: number) => boolean; | ||
export type MapFn<T, R> = (x: T, idx?: number) => R; | ||
|
||
export type Accumulator<T, R> = (acc: R, x: T) => R; | ||
export type Predicate<T> = (x: T, idx?: number) => boolean; | ||
|
||
export type MapFn<T, R> = (x: T, idx?: number) => R; | ||
// biome-ignore lint/suspicious/noExplicitAny: <explanation> | ||
export type UnaryFunction = (x: any) => any; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,16 @@ | ||
// TS' `Function` type only models the object side of it, not whether it is callable. | ||
type SomeFunction = (...args: any[]) => any; | ||
import type { Callable } from '@/types'; | ||
|
||
/** | ||
* Ensures that the given function is only called once. | ||
*/ | ||
export const once = <T extends SomeFunction>(fn: T) => { | ||
export const once = <T extends Callable>(fn: T) => { | ||
let done = false; | ||
|
||
// TODO: Better types, since it can return void? | ||
// biome-ignore lint/suspicious/noConfusingVoidType: <explanation> | ||
return (...args: Parameters<T>): ReturnType<T> | void => | ||
// biome-ignore lint/suspicious/noAssignInExpressions: Shhhh | ||
// biome-ignore lint/style/noCommaOperator: Shhh | ||
done ? void 0 : ((done = true), fn(args)); | ||
return (...args: Parameters<T>): ReturnType<T> | undefined => { | ||
if (!done) { | ||
done = true; | ||
|
||
return fn(...args); | ||
} | ||
}; | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@belsrc tagging you for final polish pass since most of this was written by yourself :D are we good remove the
eslint-disable
lines across the board?