diff --git a/internal/checker/flow.go b/internal/checker/flow.go index 58dcf30b9c..e8d9daec2e 100644 --- a/internal/checker/flow.go +++ b/internal/checker/flow.go @@ -2484,12 +2484,9 @@ func (c *Checker) isReachableFlowNodeWorker(f *FlowState, flow *ast.FlowNode, no case flags&(ast.FlowFlagsAssignment|ast.FlowFlagsCondition|ast.FlowFlagsArrayMutation) != 0: flow = flow.Antecedent case flags&ast.FlowFlagsCall != 0: - signature := c.getEffectsSignature(flow.Node) - if signature != nil { - predicate := c.getTypePredicateOfSignature(signature) - if predicate != nil && predicate.kind == TypePredicateKindAssertsIdentifier && predicate.t == nil { - predicateArgument := flow.Node.Arguments()[predicate.parameterIndex] - if predicateArgument != nil && c.isFalseExpression(predicateArgument) { + if signature := c.getEffectsSignature(flow.Node); signature != nil { + if predicate := c.getTypePredicateOfSignature(signature); predicate != nil && predicate.kind == TypePredicateKindAssertsIdentifier && predicate.t == nil { + if arguments := flow.Node.Arguments(); int(predicate.parameterIndex) < len(arguments) && c.isFalseExpression(arguments[predicate.parameterIndex]) { return false } } diff --git a/testdata/baselines/reference/compiler/assertionWithNoArgument.symbols b/testdata/baselines/reference/compiler/assertionWithNoArgument.symbols new file mode 100644 index 0000000000..b94aad1456 --- /dev/null +++ b/testdata/baselines/reference/compiler/assertionWithNoArgument.symbols @@ -0,0 +1,15 @@ +//// [tests/cases/compiler/assertionWithNoArgument.ts] //// + +=== assertionWithNoArgument.ts === +export function assertWeird(value?: string): asserts value { +>assertWeird : Symbol(assertWeird, Decl(assertionWithNoArgument.ts, 0, 0)) +>value : Symbol(value, Decl(assertionWithNoArgument.ts, 0, 28)) +>value : Symbol(value, Decl(assertionWithNoArgument.ts, 0, 28)) +} + +assertWeird(); +>assertWeird : Symbol(assertWeird, Decl(assertionWithNoArgument.ts, 0, 0)) + +assertWeird("hello"); +>assertWeird : Symbol(assertWeird, Decl(assertionWithNoArgument.ts, 0, 0)) + diff --git a/testdata/baselines/reference/compiler/assertionWithNoArgument.types b/testdata/baselines/reference/compiler/assertionWithNoArgument.types new file mode 100644 index 0000000000..51ac01d907 --- /dev/null +++ b/testdata/baselines/reference/compiler/assertionWithNoArgument.types @@ -0,0 +1,17 @@ +//// [tests/cases/compiler/assertionWithNoArgument.ts] //// + +=== assertionWithNoArgument.ts === +export function assertWeird(value?: string): asserts value { +>assertWeird : (value?: string | undefined) => asserts value +>value : string | undefined +} + +assertWeird(); +>assertWeird() : void +>assertWeird : (value?: string | undefined) => asserts value + +assertWeird("hello"); +>assertWeird("hello") : void +>assertWeird : (value?: string | undefined) => asserts value +>"hello" : "hello" + diff --git a/testdata/tests/cases/compiler/assertionWithNoArgument.ts b/testdata/tests/cases/compiler/assertionWithNoArgument.ts new file mode 100644 index 0000000000..9b33913fc1 --- /dev/null +++ b/testdata/tests/cases/compiler/assertionWithNoArgument.ts @@ -0,0 +1,8 @@ +// @strict: true +// @noemit: true + +export function assertWeird(value?: string): asserts value { +} + +assertWeird(); +assertWeird("hello");