Skip to content

Commit

Permalink
Merge pull request #258 from vim-denops/cache-predcates
Browse files Browse the repository at this point in the history
  • Loading branch information
lambdalisue committed Aug 15, 2024
2 parents b2e9943 + ae8f712 commit 127dca5
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 23 deletions.
30 changes: 12 additions & 18 deletions function/types.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import type { Predicate } from "@core/unknownutil/type";
import { assert } from "@core/unknownutil/assert";
import { asOptional } from "@core/unknownutil/as/optional";
import { isNumber } from "@core/unknownutil/is/number";
import { isObjectOf } from "@core/unknownutil/is/object-of";
import { isTupleOf } from "@core/unknownutil/is/tuple-of";
import { isUnionOf } from "@core/unknownutil/is/union-of";
import { isParametersOf } from "@core/unknownutil/is/parameters-of";

/**
* Type of `screenpos()` result.
Expand All @@ -17,15 +18,12 @@ export type ScreenPos = {
/**
* Return true if the value is ScreenPos.
*/
export function isScreenPos(x: unknown): x is ScreenPos {
const predObj = {
row: isNumber,
col: isNumber,
endcol: isNumber,
curscol: isNumber,
};
return isObjectOf(predObj)(x);
}
export const isScreenPos: Predicate<ScreenPos> = isObjectOf({
row: isNumber,
col: isNumber,
endcol: isNumber,
curscol: isNumber,
});

/**
* Assert if `x` is ScreenPos by raising an `AssertError` when it's not.
Expand All @@ -48,13 +46,9 @@ export type Position = [
/**
* Return true if the value is Position.
*/
export function isPosition(x: unknown): x is Position {
const pred = isUnionOf([
isTupleOf([isNumber, isNumber, isNumber, isNumber]),
isTupleOf([isNumber, isNumber, isNumber, isNumber, isNumber]),
]);
return pred(x);
}
export const isPosition: Predicate<Position> = isParametersOf(
[isNumber, isNumber, isNumber, isNumber, asOptional(isNumber)] as const,
);

/**
* Assert if `x` is Position by raising an `AssertError` when it's not.
Expand Down
10 changes: 5 additions & 5 deletions helper/expr_string.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
* @module
*/
import type { Context, Denops, Dispatcher, Meta } from "@denops/core";
import type { Predicate } from "@core/unknownutil/type";
import { isArray } from "@core/unknownutil/is/array";
import { isBoolean } from "@core/unknownutil/is/boolean";
import { isFunction } from "@core/unknownutil/is/function";
Expand Down Expand Up @@ -120,11 +121,10 @@ const isInstanceOfString = isInstanceOf(String);
* console.log(isExprString("foo")); // outputs: false
* ```
*/
export function isExprString(x: unknown): x is ExprString {
return isObjectOf({
[EXPR_STRING_MARK]: isLiteralOf(1),
})(x);
}
export const isExprString: Predicate<ExprString> = isObjectOf({
// NOTE: `ExprString` has a different type in definition (primitive `string`) and implementation (`String`). Only checks `EXPR_STRING_MARK` existence.
[EXPR_STRING_MARK]: isLiteralOf(1),
}) as unknown as Predicate<ExprString>;

function isJsonable(x: unknown): x is Jsonable {
return x != null && isFunction((x as Jsonable).toJSON);
Expand Down

0 comments on commit 127dca5

Please sign in to comment.