@tslite/checker 1.5.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,12 +1,52 @@
1
1
  import { VarSchema, Schema, Schemes, TypeScheme, ObjectSchema, Completion } from './types/index.js';
2
- export { AnySchema, ApplySchema, ArraySchema, Bindings, DEFAULT_TYPE_LIMITS, Discovery, ElementFlag, FnSchema, GuardSig, INSTANTIATION_COUNT_LIMIT, INSTANTIATION_DEPTH_LIMIT, Incompatibility, IncompatibilityKind, IndexSchema, Instantiation, InstantiationLimitError, KeyofSchema, LiteralSchema, MappedSchema, OverloadSchema, Param, PathSegment, Prop, ScalarSchema, TYPE_EVAL_DEPTH_LIMIT, TupleSchema, TypeEvalLimitError, TypeEvalLimits, TypeForm, TypePosition, UnionSchema, UnionTooComplexError, UnknownSchema, VarCandidates, WriteKey, apparentType, asLiteralOrigin, baseLiteralType, bindTypeParams, comparable, configureTypeLimits, contravariantInference, covariantInference, discover, equals, erasedSignature, expand1, flagAt, format, formatTypeArgs, formatTypeDiff, freeVars, groundVars, inferFromCandidates, inferredTypes, instantiate, instantiateInContextOf, instantiateLoose, isMissingType, isNumericLiteralName, isObjectOrArrayLiteral, isScheme, isSerializable, isVariadicTuple, join, joinAll, missingType, normalizeUnion, ownProp, readonlyMember, renameTypeParams, resetInstantiationCount, resetTypeLimits, resolveConditional, resolveOp, resolveTypeOp, restIndex, restTypeAtPosition, s, sampleValue, silentNever, substitute, subtype, typeAtPosition, typeDiff, typeFeatures, typeLimits, typeNeedsParens, typeParamArity, unify, widen, widenInferred, widenLiteral, widenOrigin, widenType, withUndefined, withoutUndefined } from './types/index.js';
3
- import { Scope as Scope$1, BaseNode, Node, types, SourceLocation, Expression } from '@tslite/ast';
2
+ export { AnySchema, ApplySchema, ArraySchema, Bindings, Candidates, DEFAULT_TYPE_LIMITS, Discovery, ElementFlag, FnSchema, GuardSig, INSTANTIATION_COUNT_LIMIT, INSTANTIATION_DEPTH_LIMIT, Incompatibility, IncompatibilityKind, IndexSchema, InferencePriority, Instantiation, InstantiationLimitError, KeyofSchema, LiteralSchema, MappedSchema, OverloadSchema, Param, PathSegment, Prop, ScalarSchema, TYPE_EVAL_DEPTH_LIMIT, TupleSchema, TypeEvalLimitError, TypeEvalLimits, TypeForm, TypePosition, UnionSchema, UnionTooComplexError, UnknownSchema, VarCandidates, WriteKey, apparentType, asLiteralOrigin, baseLiteralType, bindTypeParams, comparable, configureTypeLimits, contravariantInference, covariantInference, createInferences, discover, equals, erasedSignature, expand1, flagAt, format, formatTypeArgs, formatTypeDiff, freeVars, groundVars, inferFromCandidates, inferTypes, inferredBindings, inferredTypes, instantiateInContextOf, instantiateLoose, isMissingType, isNumericLiteralName, isObjectOrArrayLiteral, isScheme, isSerializable, isVariadicTuple, join, joinAll, missingType, normalizeUnion, ownProp, readonlyMember, renameTypeParams, resetInstantiationCount, resetTypeLimits, resolveConditional, resolveOp, resolveTypeOp, restIndex, restTypeAtPosition, s, sampleValue, silentNever, substitute, subtype, typeAtPosition, typeDiff, typeFeatures, typeLimits, typeNameOf, typeNeedsParens, typeParamArity, version, widen, widenInferred, widenLiteral, widenOrigin, widenType, withUndefined, withoutUndefined } from './types/index.js';
3
+ import { BaseNode, Scope as Scope$1, Node, types, SourceLocation, Expression } from '@tslite/ast';
4
4
  import { CapabilityProfile, CompiledProfile } from '@tslite/capability';
5
5
  import { Span } from '@tslite/language-service';
6
6
 
7
7
  /** As declarações de tipo nominal: o nome e os type params, em ordem. */
8
8
  type Nominals = Readonly<Record<string, readonly VarSchema[]>>;
9
9
 
10
+ /** O que uma declaração de namespace declara com um nome. */
11
+ interface NamespaceMember {
12
+ /** Visível de fora: tem `export`, ou está num contexto ambiente que exporta tudo. */
13
+ readonly exported: boolean;
14
+ /** O nome, onde o diagnóstico sobre a declaração pousa; `null` num membro do ambiente,
15
+ * que não tem texto. */
16
+ readonly id: BaseNode | null;
17
+ /** A chave do tipo no catálogo, quando não é o nome qualificado (`path.nome`): a de um
18
+ * tipo que outra declaração do mesmo namespace também declara (checker D88). */
19
+ readonly key?: string;
20
+ }
21
+ /** Uma declaração de namespace — um bloco. `namespace A.B { … }` são duas: o `A` e o `B`. */
22
+ interface NamespaceDeclaration {
23
+ /** O `TSModuleDeclaration`; `null` num namespace do ambiente, que vem das chaves do
24
+ * catálogo e não de texto. */
25
+ readonly node: BaseNode | null;
26
+ /** O caminho qualificado (`app.router`). */
27
+ readonly path: string;
28
+ /** A declaração de fora, ou `null` no topo. */
29
+ readonly parent: NamespaceDeclaration | null;
30
+ /** No contexto ambiente (`declare namespace`, e o que está dentro dele). */
31
+ readonly ambient: boolean;
32
+ /** O bloco tem valores (o `Instantiated` do `getModuleInstanceState`). */
33
+ readonly instantiated: boolean;
34
+ /** Os tipos que ESTE bloco declara (os locais do tsc, com o sentido de tipo). Um tipo e
35
+ * um namespace com o mesmo nome convivem, por isso as duas tabelas. */
36
+ readonly types: ReadonlyMap<string, NamespaceMember>;
37
+ /** Os namespaces que ESTE bloco declara. */
38
+ readonly namespaces: ReadonlyMap<string, NamespaceMember>;
39
+ }
40
+ /** As declarações de namespace de uma raiz — o programa, ou o ambiente. */
41
+ interface Namespaces {
42
+ /** As declarações de cada namespace, pelo caminho, na ordem. */
43
+ readonly byPath: ReadonlyMap<string, readonly NamespaceDeclaration[]>;
44
+ /** A declaração de cada nó `TSModuleDeclaration` que está num lugar permitido. */
45
+ readonly byNode: WeakMap<BaseNode, NamespaceDeclaration>;
46
+ /** Os aliases escritos num namespace: o nó da declaração do alias → a do namespace. */
47
+ readonly aliasOwner: WeakMap<BaseNode, NamespaceDeclaration>;
48
+ }
49
+
10
50
  /**
11
51
  * Um nível de escopo léxico (nome → `Schema`), sobre o `Scope<T>` genérico do
12
52
  * `ast` — a mesma cadeia que o `behavior` usa, com o payload do eixo de tipos.
@@ -25,8 +65,21 @@ declare const lookup: (scope: Scope, name: string) => Schema | undefined;
25
65
  * estreitado por guard (`narrow`, D13), e a que termina em `#` é o tipo
26
66
  * DECLARADO de um binding mutável (D63) — nenhum identificador tem esses
27
67
  * caracteres.
68
+ *
69
+ * Um binding do programa tem a chave do SÍMBOLO (`nome@id`, D87), e dois símbolos com
70
+ * o mesmo nome são chaves diferentes: o nome visível é o de fora do `@`, e vale o mais
71
+ * interno. A cadeia vem de dentro para fora, e um refinamento de um símbolo só existe
72
+ * onde o nome dele não está sombreado — então a primeira chave de cada nome é a que ele
73
+ * denota ali.
28
74
  */
29
75
  declare const visibleNames: (scope: Scope) => Map<string, Schema>;
76
+ /**
77
+ * `name`, visto de `scope`, denota um nome do AMBIENTE (a DI, a lib) — e não um símbolo
78
+ * do programa? É o que o tsc responde olhando a declaração do símbolo resolvido (o
79
+ * `defaultLibrary` do `classifier2020`). A primeira ligação do nome, de dentro para fora, é
80
+ * a que ele denota ali (ver `visibleNames`); `false` quando nada o liga.
81
+ */
82
+ declare function resolvesToEnvironment(scope: Scope, name: string): boolean;
30
83
  /**
31
84
  * O ambiente injetado pela aplicação — a fronteira de tipos do sistema.
32
85
  * `scope` é a raiz da DI; `types` resolve tipos nomeados em anotações.
@@ -91,6 +144,14 @@ interface Env {
91
144
  * mesmo tipo, e a aridade é cobrada como a de um alias.
92
145
  */
93
146
  readonly nominals?: Nominals;
147
+ /**
148
+ * Os namespaces do ambiente (D83), lidos das chaves de `types` e `schemes`: um tipo com o
149
+ * nome qualificado (`state.Config`) é o membro `Config` do namespace `state`, como num
150
+ * `.d.ts` com `declare namespace state { … }`. Os corpos já chegam com os nomes
151
+ * resolvidos a partir do namespace de cada um — um `Config` no corpo de `state.Result` é
152
+ * o `state.Config` —, sem o host reescrever nada.
153
+ */
154
+ readonly namespaces?: Namespaces;
94
155
  }
95
156
  /**
96
157
  * O que um `Env` tem além das variáveis. Cada campo espelha o de {@link Env}, e
@@ -139,7 +200,7 @@ declare const resolveNamed: (env: Env, name: string) => Schema | undefined;
139
200
  declare const resolveScheme: (env: Env, name: string) => TypeScheme | undefined;
140
201
 
141
202
  type Severity = "error" | "warning";
142
- type DiagnosticCode = "not-assignable" | "unknown-name" | "not-callable" | "no-such-member" | "not-object" | "possibly-nullish" | "unknown-value" | "const-needs-init" | "cannot-redeclare" | "circular-type-alias" | "circular-type-annotation" | "unknown-module" | "not-a-schema" | "type-as-value" | "asserter-needs-name" | "shadows-schema" | "missing-argument" | "excess-argument" | "excess-property" | "spread-argument" | "required-after-optional" | "not-iterable" | "not-spreadable" | "implicit-any" | "props-mismatch" | "no-matching-overload" | "constraint-violation" | "wrong-type-argument-count" | "unsupported" | "unused-name" | "assign-to-const" | "for-in-destructuring" | "readonly-write" | "cast-unsound" | "unprovable-value" | "not-arithmetic-operand" | "operator-not-applicable" | "implicit-coercion" | "node-not-allowed" | "name-not-allowed" | "type-feature-not-allowed" | "any-not-allowed" | "narrowing-cast-not-allowed" | "too-deep" | "too-complex-union" | "too-large" | "wrong-result-type";
203
+ type DiagnosticCode = "not-assignable" | "unknown-name" | "not-callable" | "no-such-member" | "not-object" | "possibly-nullish" | "unknown-value" | "const-needs-init" | "cannot-redeclare" | "circular-type-alias" | "circular-type-annotation" | "unknown-module" | "not-a-schema" | "type-as-value" | "asserter-needs-name" | "shadows-schema" | "missing-argument" | "excess-argument" | "excess-property" | "spread-argument" | "required-after-optional" | "not-iterable" | "not-spreadable" | "overwritten-property" | "implicit-any" | "props-mismatch" | "no-matching-overload" | "constraint-violation" | "wrong-type-argument-count" | "unsupported" | "unused-name" | "assign-to-const" | "for-in-destructuring" | "for-in-not-object" | "readonly-write" | "cast-unsound" | "unprovable-value" | "not-arithmetic-operand" | "operator-not-applicable" | "no-overlap" | "uncalled-function-check" | "not-comparable" | "misplaced-namespace" | "ambient-initializer" | "ambient-statement" | "used-before-assigned" | "used-before-declaration" | "implicit-coercion" | "node-not-allowed" | "name-not-allowed" | "type-feature-not-allowed" | "any-not-allowed" | "narrowing-cast-not-allowed" | "too-deep" | "too-complex-union" | "too-large" | "wrong-result-type";
143
204
  /**
144
205
  * A **classe** do diagnóstico — espelha a divisão de passes do `tsc` (que nós
145
206
  * fundimos num walk só): `semantic` é o que o **binder** do tsc pega (validade do
@@ -187,6 +248,16 @@ type DiagnosticData = {
187
248
  readonly kind: "implicit-coercion";
188
249
  readonly textConvertible: boolean;
189
250
  };
251
+ /**
252
+ * Outro lugar do programa que explica o diagnóstico — o `DiagnosticRelatedInformation` do
253
+ * tsc (`types.ts`), que o `addRelatedInfo` anexa, e o `relatedInformation` do LSP. O nó é
254
+ * por referência, como o do diagnóstico; a mensagem diz o papel dele ("This spread always
255
+ * overwrites this property.").
256
+ */
257
+ interface DiagnosticRelatedInformation {
258
+ readonly node: BaseNode;
259
+ readonly message: string;
260
+ }
190
261
  interface Diagnostic {
191
262
  readonly code: DiagnosticCode;
192
263
  /** A classe do diagnóstico (deriva do `code`) — ver {@link DiagnosticKind}. */
@@ -197,6 +268,8 @@ interface Diagnostic {
197
268
  readonly message: string;
198
269
  /** Ver {@link DiagnosticData}. Presente só onde há o que agir. */
199
270
  readonly data?: DiagnosticData;
271
+ /** Ver {@link DiagnosticRelatedInformation}. Presente só onde o tsc a anexa. */
272
+ readonly relatedInformation?: readonly DiagnosticRelatedInformation[];
200
273
  }
201
274
  /**
202
275
  * Builder genérico de diagnóstico (severidade configurável). Usado pelos
@@ -244,7 +317,28 @@ declare const diag: {
244
317
  asserterNeedsName: (node: BaseNode, asserter: string) => Diagnostic;
245
318
  shadowsSchema: (node: BaseNode, name: string) => Diagnostic;
246
319
  unknownModule: (node: BaseNode, source: string) => Diagnostic;
247
- cannotRedeclare: (node: BaseNode, name: string) => Diagnostic;
320
+ /**
321
+ * O mesmo nome declarado de novo onde não pode, com o texto de cada mecanismo do tsc
322
+ * 3.9.10. O conceito é um só, o do `cannot-redeclare` (D2), e o nó é o NOME de cada
323
+ * declaração acusada.
324
+ */
325
+ redeclaration: {
326
+ /** TS2451: o que está na tabela é variável de escopo de bloco (o `declareSymbol` do
327
+ * binder, `binder.ts:476`), em cada declaração. */
328
+ blockScoped: (node: BaseNode, name: string) => Diagnostic;
329
+ /** TS2300: o que está na tabela é outra coisa (um parâmetro, um import, um alias, um
330
+ * namespace), em cada declaração. */
331
+ duplicate: (node: BaseNode, name: string) => Diagnostic;
332
+ /** TS2440: o import fundido com uma declaração local que ocupa o significado do alvo
333
+ * dele (o `checkAliasSymbol`, `checker.ts:34279`), no especificador. */
334
+ importConflict: (node: BaseNode, name: string) => Diagnostic;
335
+ /** TS2492: o bloco do `catch` declara de novo o binding dele (o `checkTryStatement`,
336
+ * `checker.ts:33056`), na declaração do bloco. */
337
+ catchClause: (node: BaseNode, name: string) => Diagnostic;
338
+ /** TS2395: declarações do mesmo símbolo, umas exportadas e outras locais, no mesmo
339
+ * espaço (o `checkExportsOnMergedDeclarations`, `checker.ts:30401`), em cada uma. */
340
+ mixedExport: (node: BaseNode, name: string) => Diagnostic;
341
+ };
248
342
  circularTypeAlias: (node: BaseNode, name: string) => Diagnostic;
249
343
  circularTypeAnnotation: (node: BaseNode, name: string) => Diagnostic;
250
344
  excessArgument: (node: BaseNode, expected: number, got: number) => Diagnostic;
@@ -265,12 +359,41 @@ declare const diag: {
265
359
  requiredAfterOptional: (node: BaseNode) => Diagnostic;
266
360
  notIterable: (node: BaseNode, type: Schema) => Diagnostic;
267
361
  /**
268
- * O rest de um padrão de objeto (`{ a, ...rest }`) sobre uma fonte que não é objeto — o
269
- * TS2700 do tsc, no elemento do rest (`getTypeForBindingElement`, `checker.ts:7439`: o
270
- * `isValidSpreadType` da fonte). O código é o do conceito — a fonte não se espalha —, par do
271
- * `not-iterable` do padrão de array.
362
+ * A fonte não se espalha: o `isValidSpreadType` do tsc (`checker.ts:23342`) a recusa. O
363
+ * código é o do conceito, par do `not-iterable` do padrão de array; a mensagem diz o caso.
364
+ */
365
+ notSpreadable: {
366
+ /** TS2700: o rest de um padrão de objeto (`{ a, ...rest }`), no elemento do rest
367
+ * (`getTypeForBindingElement`, `checker.ts:7439`). D80. */
368
+ rest: (node: BaseNode) => Diagnostic;
369
+ /** TS2698: o spread num literal de objeto (`{ ...x }`), no membro `...x`
370
+ * (`checkObjectLiteral`, `checker.ts:23254`). */
371
+ spread: (node: BaseNode) => Diagnostic;
372
+ };
373
+ /**
374
+ * A chave escrita duas vezes num literal de objeto. O tsc a acusa por três mecanismos, e
375
+ * cada um é um diagnóstico com o texto e o nó dele; o conceito é um só, o do
376
+ * `cannot-redeclare` (D25).
377
+ */
378
+ duplicateKey: {
379
+ /** TS1117: a chave IDENTIFICADOR repetida, no modo estrito (o `bindObjectLiteralExpression`
380
+ * do binder, `binder.ts:2037`), na repetição. */
381
+ strict: (node: BaseNode) => Diagnostic;
382
+ /** TS2300: o nome repetido (o `checkGrammarObjectLiteralExpression`), na repetição, com o
383
+ * texto do nome como escrito. */
384
+ identifier: (node: BaseNode, text: string) => Diagnostic;
385
+ /** TS2718: a chave computada ligada tarde com o nome de uma prop ligada cedo (o
386
+ * `lateBindMember`), na chave tardia. */
387
+ lateBound: (node: BaseNode, name: string) => Diagnostic;
388
+ /** TS2733: a primeira declaração ligada cedo desse nome, no mesmo `lateBindMember`. */
389
+ alsoDeclared: (node: BaseNode, name: string) => Diagnostic;
390
+ };
391
+ /**
392
+ * TS2783: a prop escrita num literal de objeto que um spread seguinte sempre sobrescreve,
393
+ * na prop escrita, com o spread na informação relacionada (TS2785) — o
394
+ * `checkSpreadPropOverrides` do tsc (`checker.ts:23558`).
272
395
  */
273
- notSpreadable: (node: BaseNode) => Diagnostic;
396
+ overwrittenProperty: (node: BaseNode, name: string, spread: BaseNode) => Diagnostic;
274
397
  /**
275
398
  * O `any` que ninguém escreveu — o `noImplicitAny` do tsc 3.9.10, que faz parte do
276
399
  * `--strict` e está sempre ligado aqui (D81). Um código só, com o texto de cada caso (o
@@ -305,6 +428,43 @@ declare const diag: {
305
428
  * lugar do `{1}`. */
306
429
  constraintViolation: (node: BaseNode, actual: Schema, bound: Schema) => Diagnostic;
307
430
  unsupported: (node: BaseNode, what: string) => Diagnostic;
431
+ /**
432
+ * O nome usado antes da declaração dele, com o texto de cada mecanismo do tsc 3.9.10. O
433
+ * conceito é um só (D2), e o nó é o USO.
434
+ */
435
+ usedBeforeDeclaration: {
436
+ /** TS2448: a variável de escopo de bloco (o `checkResolvedBlockScopedVariable`,
437
+ * `checker.ts:2259`), com a declaração na informação relacionada (TS2728). */
438
+ blockScoped: (node: BaseNode, name: string, declaration: BaseNode) => Diagnostic;
439
+ /** TS2372: o default de um parâmetro cita o próprio parâmetro (`checker.ts:2009`). */
440
+ parameterSelf: (node: BaseNode, parameter: string) => Diagnostic;
441
+ /** TS2373: o default de um parâmetro cita um declarado depois dele (`checker.ts:2013`). */
442
+ parameterAfter: (node: BaseNode, parameter: string, name: string) => Diagnostic;
443
+ };
444
+ /** TS2454: a leitura de uma variável que, por algum caminho, ainda não recebeu valor. */
445
+ usedBeforeAssigned: (node: BaseNode, name: string) => Diagnostic;
446
+ /** O namespace (D83), com o texto do tsc em cada um. */
447
+ namespace: {
448
+ /** TS2503: o primeiro segmento de um nome qualificado não é namespace nenhum. O
449
+ * código é o do nome que não existe, como o TS2304. */
450
+ notFound: (node: BaseNode, name: string) => Diagnostic;
451
+ /** TS2694: o namespace não exporta o membro, no segmento do membro. */
452
+ noExportedMember: (node: BaseNode, namespace: string, member: string) => Diagnostic;
453
+ /** TS2708: um namespace só de tipos numa posição de valor — o par do TS2693. */
454
+ asValue: (node: BaseNode, name: string) => Diagnostic;
455
+ /** TS1235: a declaração fora do topo e de outro namespace, no primeiro token. */
456
+ misplaced: (node: BaseNode) => Diagnostic;
457
+ };
458
+ /** O contexto ambiente (`declare namespace`) só declara — o `checkAmbientInitializer` e o
459
+ * `checkGrammarStatementInAmbientContext` do tsc, no nó de lá. */
460
+ ambient: {
461
+ /** TS1039: o inicializador que o contexto ambiente não aceita, nele. */
462
+ initializer: (node: BaseNode) => Diagnostic;
463
+ /** TS1254: o `const` sem anotação com um inicializador que não é literal, nele. */
464
+ constInitializer: (node: BaseNode) => Diagnostic;
465
+ /** TS1036: o statement que não é declaração, uma vez por bloco, no primeiro token. */
466
+ statement: (node: BaseNode) => Diagnostic;
467
+ };
308
468
  /**
309
469
  * Argumento de tipo explícito com aridade errada. Assinatura **sem** type params
310
470
  * declarados conta como `expected: 0` — é o que o tsc faz quando
@@ -329,7 +489,7 @@ declare const diag: {
329
489
  * a resposta é sempre não (D9 — o piso é `const`). Mensagem no texto do TS2588 /
330
490
  * TS2632 (import). Ver `mutation.ts`.
331
491
  */
332
- assignToConst: (node: BaseNode, name: string, kind: "const" | "import") => Diagnostic;
492
+ assignToConst: (node: BaseNode, name: string, kind: "const" | "import" | "not-a-variable") => Diagnostic;
333
493
  /**
334
494
  * As chaves de um `for…in` não cabem no alvo dele (`let n: number; for (n in o)`). É a
335
495
  * relação que falha — o tipo das chaves contra o tipo declarado do alvo —, e por isso
@@ -338,6 +498,10 @@ declare const diag: {
338
498
  forInTarget: (node: BaseNode) => Diagnostic;
339
499
  /** `for ([a] in o)` — o alvo de um `for…in` é uma chave, não se desestrutura. TS2491. */
340
500
  forInDestructuring: (node: BaseNode) => Diagnostic;
501
+ /** `for (k in n)` com `n` que não é objeto, `any` nem type param — o TS2407 do
502
+ * `checkForInStatement` do tsc (`checker.ts:32148`), no que se percorre, com o tipo sem o
503
+ * nulo. */
504
+ forInNotObject: (node: BaseNode, type: Schema) => Diagnostic;
341
505
  /**
342
506
  * Escrita por um ÍNDICE readonly — `readonly T[]` ou `{ readonly [k: string]: V }`. É
343
507
  * a outra metade do modificador: a relação (TC29) diz quem pode ser ATRIBUÍDO a quem;
@@ -377,6 +541,29 @@ declare const diag: {
377
541
  * entre tipos incompatíveis. Espelha TS2365.
378
542
  */
379
543
  operatorNotApplicable: (node: BaseNode, op: string, left: Schema, right: Schema) => Diagnostic;
544
+ /**
545
+ * TS2678: o `case` de um `switch` que não é comparável ao discriminante, no `case` — o
546
+ * `checkTypeComparableTo` do `checkSwitchStatement` do tsc (`checker.ts:32977`). Os tipos
547
+ * chegam como a comparação os viu: alargados até a base, a menos que os dois sejam
548
+ * literais. O tsc elabora a relação num objeto (TS2741, TS2740); aqui a mensagem é a do
549
+ * TS2678, e o código é o contrato (D2).
550
+ */
551
+ notComparable: (node: BaseNode, source: Schema, target: Schema) => Diagnostic;
552
+ /**
553
+ * TS2774: a condição de um `if` ou de um `?:` é uma função que nunca é falsy, e o ramo
554
+ * verdadeiro não a usa — o `checkTestingKnownTruthyCallableType` do tsc
555
+ * (`checker.ts:31963`), na condição.
556
+ */
557
+ uncalledFunctionCheck: (node: BaseNode) => Diagnostic;
558
+ /**
559
+ * TS2367: uma igualdade entre tipos sem sobreposição, cujo resultado já é sabido — o
560
+ * `tryGiveBetterPrimaryError` do tsc (`checker.ts`, no `reportOperatorError`): `'false'`
561
+ * para `===`/`==`, `'true'` para `!==`/`!=`. Os tipos chegam como a mensagem os mostra
562
+ * (as bases, quando os literais também não se relacionam). Com `missingAwait`, os dois
563
+ * lados se relacionariam desembrulhando o `Promise`, e a informação relacionada é o
564
+ * TS2773 (o `errorAndMaybeSuggestAwait`).
565
+ */
566
+ noOverlap: (node: BaseNode, op: string, left: Schema, right: Schema, missingAwait: boolean) => Diagnostic;
380
567
  /**
381
568
  * `"x" + n` — o `+` não converte para texto (Proposal 009).
382
569
  *
@@ -399,11 +586,13 @@ declare const diag: {
399
586
  /**
400
587
  * Coletor de diagnósticos — acumula durante o walk, sem `throw`.
401
588
  *
402
- * Guarda cada diagnóstico UMA vez: um segundo com o mesmo nó, o mesmo código e a mesma
403
- * mensagem não entra. É a coleção do tsc (`createDiagnosticCollection`, que insere pelo
404
- * `insertSorted` e não repete o que o `compareDiagnostics` acha igual), e é o que deixa
405
- * um argumento ser tipado mais de uma vez — as rodadas da chamada (D53, D81) — sem que o
406
- * erro de dentro dele saia duas vezes.
589
+ * Guarda cada diagnóstico UMA vez: um segundo com o mesmo nó, o mesmo código, a mesma
590
+ * mensagem e a mesma informação relacionada não entra. É a coleção do tsc
591
+ * (`createDiagnosticCollection`, que insere pelo `insertSorted` e não repete o que o
592
+ * `compareDiagnostics` acha igual — ele compara também o `relatedInformation`), e é o que
593
+ * deixa um argumento ser tipado mais de uma vez — as rodadas da chamada (D53, D81) — sem
594
+ * que o erro de dentro dele saia duas vezes. Dois diagnósticos que só diferem na
595
+ * informação relacionada são dois: `{ a: 1, ...o1, ...o2 }` acusa o `a` uma vez por spread.
407
596
  */
408
597
  interface DiagnosticSink {
409
598
  /** Diagnósticos coletados, na ordem em que foram reportados, sem repetição. */
@@ -464,7 +653,8 @@ interface CheckResult {
464
653
  * forma de scheme. Publicado porque QUEM CONSULTA precisa dele: `discover`
465
654
  * (completions, navegação de membro) só expande um `apply` se receber este
466
655
  * catálogo. Sem publicar, cada consumidor re-derivaria a união — e derivações
467
- * paralelas divergem.
656
+ * paralelas divergem. Num programa sem alias é o catálogo do `Env`, o mesmo objeto em
657
+ * toda checagem, e congelado (D87).
468
658
  */
469
659
  readonly schemes: Schemes;
470
660
  /**
@@ -578,6 +768,15 @@ declare const FUNCTION_KINDS: readonly ["ArrowFunctionExpression", "FunctionExpr
578
768
  * nó proibido por `compiled` — via `nodeViolation`, a **fonte única** de gating
579
769
  * compartilhada com o interpret e o codegen. É o que `fromCapability` monta (+ o
580
770
  * host allowlist). Garante que os 3 consumidores concordam por construção.
771
+ *
772
+ * Cada nó vai com o pai: é ele que separa o `export` de um membro de namespace
773
+ * (a visibilidade, como o modificador do tsc) do `export` de módulo do teto
774
+ * (capability CP1).
775
+ *
776
+ * O profile diz o que um lugar da aplicação pode EXECUTAR, e o corpo de um namespace que não
777
+ * vira código não executa: o nó do namespace é gateado, e o corpo dele não
778
+ * (`bodyDoesNotRun`). Os guards de autoria de tipo, abaixo, julgam o texto escrito e descem
779
+ * nele.
581
780
  */
582
781
  declare function capabilityNodes(compiled: CompiledProfile, severity?: Severity): Guard;
583
782
  /**
@@ -876,4 +1075,4 @@ declare function anchorDiagnostics<A>(root: object, diagnostics: readonly Diagno
876
1075
  */
877
1076
  declare function spanOf(text: string, loc: SourceLocation | null | undefined): Span | undefined;
878
1077
 
879
- export { type AnchorDiagnosticsOptions, type AnchoredDiagnostic, type Anchors, BINARY_OP, BINARY_OPS, type BinaryOpCategory, type BinaryOpSpec, type BindingMap, type CheckOptions, type CheckResult, type CheckerErrorCode, Completion, type Diagnostic, type DiagnosticCode, type DiagnosticData, type DiagnosticKind, type DiagnosticSink, type Env, type EnvOptions, FUNCTION_KINDS, type Guard, type GuardContext, LOGICAL_OPS, type LogicalOpSpec, type LowerValueOptions, type MissingProperty, type Nominals, ObjectSchema, type Occurrence, type OpResult, type Profile, type ReferenceSymbol, Schema, Schemes, type Scope, type Severity, type Shorthand, type TypeOverlay, type TypeRefSite, TypeScheme, UNARY_OPS, type UnaryOpSpec, type UnusedOptions, VarSchema, anchorDiagnostics, annotate, annotateReturn, asExpression, binaryOpsProducing, calleeAllowlist, capabilityNodes, check, childScope, collectBindings, collectMutations, collectReferences, collectUnused, componentProps, componentPropsOf, contextualTypeAt, createAnchors, createEnv, createSink, diag, diagnosticsAt, extractModuleType, fromCapability, guard, guardsFromCompiled, lookup, lowerValue, makeDiagnostic, maxArgs, maxCallNesting, maxDepth, maxFunctionNesting, maxNestingOf, maxNodes, memberCompletions, memberDepth, opResultSchema, resolveNamed, resolveScheme, resultType, rootScope, sameSymbol, scopeAt, scopeCompletions, spanOf, typeAt, unaryOpsProducing, visibleNames };
1078
+ export { type AnchorDiagnosticsOptions, type AnchoredDiagnostic, type Anchors, BINARY_OP, BINARY_OPS, type BinaryOpCategory, type BinaryOpSpec, type BindingMap, type CheckOptions, type CheckResult, type CheckerErrorCode, Completion, type Diagnostic, type DiagnosticCode, type DiagnosticData, type DiagnosticKind, type DiagnosticRelatedInformation, type DiagnosticSink, type Env, type EnvOptions, FUNCTION_KINDS, type Guard, type GuardContext, LOGICAL_OPS, type LogicalOpSpec, type LowerValueOptions, type MissingProperty, type Nominals, ObjectSchema, type Occurrence, type OpResult, type Profile, type ReferenceSymbol, Schema, Schemes, type Scope, type Severity, type Shorthand, type TypeOverlay, type TypeRefSite, TypeScheme, UNARY_OPS, type UnaryOpSpec, type UnusedOptions, VarSchema, anchorDiagnostics, annotate, annotateReturn, asExpression, binaryOpsProducing, calleeAllowlist, capabilityNodes, check, childScope, collectBindings, collectMutations, collectReferences, collectUnused, componentProps, componentPropsOf, contextualTypeAt, createAnchors, createEnv, createSink, diag, diagnosticsAt, extractModuleType, fromCapability, guard, guardsFromCompiled, lookup, lowerValue, makeDiagnostic, maxArgs, maxCallNesting, maxDepth, maxFunctionNesting, maxNestingOf, maxNodes, memberCompletions, memberDepth, opResultSchema, resolveNamed, resolveScheme, resolvesToEnvironment, resultType, rootScope, sameSymbol, scopeAt, scopeCompletions, spanOf, typeAt, unaryOpsProducing, visibleNames };