@suss/adapter-ruby 0.22.1 → 0.22.3
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/README.md +27 -2
- package/dist/index.cjs +2518 -17465
- package/dist/index.d.cts +86 -4
- package/dist/index.d.ts +86 -4
- package/dist/index.js +2551 -17474
- package/package.json +7 -5
package/dist/index.d.cts
CHANGED
|
@@ -4,6 +4,7 @@ import { Database } from '@suss/datalog';
|
|
|
4
4
|
import { TypeShape, BehavioralSummary } from '@suss/behavioral-ir';
|
|
5
5
|
import { RawCodeStructure, TimingReport, ExtractionReport, CacheDiagnostic } from '@suss/extractor';
|
|
6
6
|
import { WhyExplained } from '@suss/resolution';
|
|
7
|
+
import { Value } from '@suss/values';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* A new `Parser` for every call, so that parses running at the same time do
|
|
@@ -106,6 +107,13 @@ interface ClassInfo {
|
|
|
106
107
|
qualifiedName: string;
|
|
107
108
|
/** Null when it declares no superclass, or the expression is not a literal constant path. */
|
|
108
109
|
superclassQualifiedName: string | null;
|
|
110
|
+
/**
|
|
111
|
+
* Every name the superclass expression can resolve to, in the order Ruby
|
|
112
|
+
* tries them: each level of the enclosing nesting innermost first, then the
|
|
113
|
+
* bare name at top level. A compound path is one entry. Empty when there is
|
|
114
|
+
* no readable superclass.
|
|
115
|
+
*/
|
|
116
|
+
superclassCandidates: readonly string[];
|
|
109
117
|
/** `body_statement` node, or null for `class Foo; end`. */
|
|
110
118
|
bodyNode: Node | null;
|
|
111
119
|
/** `Module.nesting` in effect inside this class's own body, innermost first. */
|
|
@@ -255,6 +263,18 @@ interface ControllerActions {
|
|
|
255
263
|
ancestryRootClassNames: string[];
|
|
256
264
|
/** Status code a wire response gets when the action does not say otherwise. */
|
|
257
265
|
defaultStatusCode: number;
|
|
266
|
+
/** The receiverless calls the library gives an action for writing a wire status. Leave it out and every action reports the default. */
|
|
267
|
+
responseStatusCalls?: RbStatusCall[];
|
|
268
|
+
/** The number behind each name the library accepts where a status number could go, Rack's own symbol table for Rails. */
|
|
269
|
+
statusCodeNames?: Record<string, number>;
|
|
270
|
+
/**
|
|
271
|
+
* The methods every controller gets without defining them, which for
|
|
272
|
+
* Rails is `params`, `render` and the rest of what `ActionController`
|
|
273
|
+
* mixes in. An action's effect list is there to show what the action
|
|
274
|
+
* reaches in the project, and nothing in the project defines these,
|
|
275
|
+
* so a receiverless call to one of them is left off that list.
|
|
276
|
+
*/
|
|
277
|
+
inheritedMethodNames?: string[];
|
|
258
278
|
/** Absolute path of the file this pattern's own routing came from, for the one gap `routingGaps` may report. */
|
|
259
279
|
routesFile: string;
|
|
260
280
|
/** The method and path a project's own routing gives one controller's action, or null when that action has none. */
|
|
@@ -265,6 +285,25 @@ interface ControllerActions {
|
|
|
265
285
|
/** One message per routing declaration kind this pattern's reading left uncovered. A pure read: calling it again gives the same list. */
|
|
266
286
|
routingGaps?: () => readonly string[];
|
|
267
287
|
}
|
|
288
|
+
/**
|
|
289
|
+
* One call an action writes to send a response, and where that call takes
|
|
290
|
+
* the status. A call may take it both ways, and then the keyword wins,
|
|
291
|
+
* which is what Rails does with `head :ok, status: :created`.
|
|
292
|
+
*/
|
|
293
|
+
interface RbStatusCall {
|
|
294
|
+
/** The call's own name as an action writes it, `render` for Rails. */
|
|
295
|
+
name: string;
|
|
296
|
+
/** The keyword whose value gives the status, `status` for Rails. */
|
|
297
|
+
statusKeyword?: string;
|
|
298
|
+
/** The index of the positional argument giving the status, 0 for Rails' `head :no_content`. */
|
|
299
|
+
statusArgument?: number;
|
|
300
|
+
/**
|
|
301
|
+
* The status this call sends when the action writes none. Rails'
|
|
302
|
+
* `redirect_to` sends 302 where its `render` sends the controller's own
|
|
303
|
+
* default, so a default declared here wins over `defaultStatusCode`.
|
|
304
|
+
*/
|
|
305
|
+
defaultStatusCode?: number;
|
|
306
|
+
}
|
|
268
307
|
/** A class or module whose ancestry reaches one of `baseClassNames` declares GraphQL fields through DSL calls in its own body. */
|
|
269
308
|
interface GraphqlObjectFields {
|
|
270
309
|
type: "graphqlObjectFields";
|
|
@@ -321,20 +360,32 @@ interface RbStorageOptions {
|
|
|
321
360
|
readonly patterns: readonly RbStoragePattern[];
|
|
322
361
|
}
|
|
323
362
|
|
|
363
|
+
/** The methods a pack declared the library defines itself, so a receiverless call to one of them is not work the project does. */
|
|
364
|
+
type InheritedMethods = ReadonlySet<string>;
|
|
365
|
+
|
|
324
366
|
/** Parsed files by absolute path, so a class that several fields refer to is only parsed once. */
|
|
325
367
|
interface FileCache {
|
|
326
368
|
get(absPath: string): Promise<Node | null>;
|
|
327
369
|
}
|
|
328
370
|
declare function createFileCache(parse: (source: string) => Promise<Node>, readFile: (absPath: string) => string | null): FileCache;
|
|
329
|
-
|
|
371
|
+
/**
|
|
372
|
+
* What the run's packs said that reading a method body needs. An
|
|
373
|
+
* options object that already declares both fields, `DiscoveryOptions`
|
|
374
|
+
* among them, is one of these and can be passed straight through.
|
|
375
|
+
*/
|
|
376
|
+
interface BodyReadOptions {
|
|
377
|
+
/** What a pack needs to say a call talks to the database. Absent when no pack does. */
|
|
378
|
+
readonly storage?: RbStorageOptions | undefined;
|
|
379
|
+
/** The methods every pack in the run said its own library defines, which are left off an effect list. */
|
|
380
|
+
readonly inheritedMethods?: InheritedMethods | undefined;
|
|
381
|
+
}
|
|
382
|
+
interface DiscoveryOptions extends BodyReadOptions {
|
|
330
383
|
packs: RubyPack[];
|
|
331
384
|
/** Repo-relative or absolute path recorded on each summary's `location.file`. */
|
|
332
385
|
filePath: string;
|
|
333
386
|
/** Absolute path of the file being read, for a block's own `ReachedBody.file`. Falls back to `filePath` when nothing was written to disk. */
|
|
334
387
|
absoluteFile?: string;
|
|
335
388
|
cache: FileCache;
|
|
336
|
-
/** What a pack needs to say a call talks to the database. Absent when no pack does. */
|
|
337
|
-
storage?: RbStorageOptions | undefined;
|
|
338
389
|
/** Called once per discovered unit whose own body is a method this run can follow calls out of, so the reach walk has a place to start. */
|
|
339
390
|
onReachSeed?: (raw: RawCodeStructure, seed: ReachSeed) => void;
|
|
340
391
|
}
|
|
@@ -563,6 +614,37 @@ interface TypeReadContext {
|
|
|
563
614
|
*/
|
|
564
615
|
declare function typeShapeFromNode(node: Node, ctx: TypeReadContext): TypeShape | null;
|
|
565
616
|
|
|
617
|
+
/**
|
|
618
|
+
* One evaluator per project, over the parsed files and the resolution
|
|
619
|
+
* facts. A reader hands in a node and gets back the abstract value it
|
|
620
|
+
* comes down to; a route path or a prefix is then spelled from that
|
|
621
|
+
* value rather than read off one syntax shape.
|
|
622
|
+
*
|
|
623
|
+
* The facts key a node by file and span, so the evaluator keeps every
|
|
624
|
+
* file's root to find the node a fact refers to. Without facts,
|
|
625
|
+
* which is how a unit test or a routes file on its own runs, the
|
|
626
|
+
* evaluator still follows names within the file through the engine's
|
|
627
|
+
* own scope walk.
|
|
628
|
+
*/
|
|
629
|
+
|
|
630
|
+
interface EvaluatedFile {
|
|
631
|
+
readonly file: string;
|
|
632
|
+
readonly root: Node;
|
|
633
|
+
}
|
|
634
|
+
interface ProjectNodes {
|
|
635
|
+
readonly files: readonly EvaluatedFile[];
|
|
636
|
+
/** Every method definition by its node key, for a resolved callee. */
|
|
637
|
+
readonly definitions: ReadonlyMap<string, Node>;
|
|
638
|
+
}
|
|
639
|
+
/** Register the parsed project, so reads through `db` can follow the facts back to nodes. */
|
|
640
|
+
declare function bindEvaluator(db: Database, nodes: ProjectNodes): void;
|
|
641
|
+
/** The abstract value `node` comes down to, through the facts when `db` was bound. */
|
|
642
|
+
declare function evaluatedValue(node: Node, db?: Database): Value;
|
|
643
|
+
/** The one string `node` comes down to, or null when it does not settle on one. */
|
|
644
|
+
declare function stringValueOf(node: Node, db?: Database): string | null;
|
|
645
|
+
/** Every method a file defines, keyed the way the facts key it, for `bindEvaluator`. */
|
|
646
|
+
declare function methodDefinitionsIn(file: string, root: Node): Map<string, Node>;
|
|
647
|
+
|
|
566
648
|
/**
|
|
567
649
|
* version.ts: this adapter's own half of the cache key.
|
|
568
650
|
*
|
|
@@ -573,4 +655,4 @@ declare function typeShapeFromNode(node: Node, ctx: TypeReadContext): TypeShape
|
|
|
573
655
|
*/
|
|
574
656
|
declare const ADAPTER_VERSION = "0.1.0";
|
|
575
657
|
|
|
576
|
-
export { ADAPTER_VERSION, type AncestorEntry, type AncestorLookup, type Ancestry, type CallArgs, type ClassInfo, type ConstantPathConvention, type ControllerActions, type DiscoveryOptions, type ExtractRubyOptions, type ExtractRubyResult, type FileCache, type FileConstants, type GraphqlObjectFields, type GraphqlTypeNameConvention, type MethodLookup, type Range, type RbStoragePattern, type ReachedBody, type RubyDiscoveryPattern, type RubyExtendsSite, type RubyPack, type RubyRequireSite, type RubyStubEvidence, type RubyStubEvidenceOptions, type RubyValueHandle, RubyWhySession, type RubyWhySessionOptions, type TypeReadContext, ancestryOf, bodyStatements, booleanLiteralValue, collectFileConstants, createFileCache, discoverUnits, emitConstantBindings, emitEntryFact, emitValueFacts, extractRubyProject, field, findRubyFiles, graphqlTypeNameFromQualified, hashKeySymbolName, inheritedStatements, methodInAncestry, nodeId, parseRuby, parseRubySync, preloadRubyGrammar, qualifyConstantRef, reachDefinition, readCallArgs, readKey, resolveConstantFile, rubyStubEvidence, runStatements, stringLiteralValue, symbolValue, typeShapeFromNode, underscoreConstantPath, unitKey, walkClasses, walkDefinitions };
|
|
658
|
+
export { ADAPTER_VERSION, type AncestorEntry, type AncestorLookup, type Ancestry, type CallArgs, type ClassInfo, type ConstantPathConvention, type ControllerActions, type DiscoveryOptions, type EvaluatedFile, type ExtractRubyOptions, type ExtractRubyResult, type FileCache, type FileConstants, type GraphqlObjectFields, type GraphqlTypeNameConvention, type MethodLookup, type ProjectNodes, type Range, type RbStatusCall, type RbStoragePattern, type ReachedBody, type RubyDiscoveryPattern, type RubyExtendsSite, type RubyPack, type RubyRequireSite, type RubyStubEvidence, type RubyStubEvidenceOptions, type RubyValueHandle, RubyWhySession, type RubyWhySessionOptions, type TypeReadContext, ancestryOf, bindEvaluator, bodyStatements, booleanLiteralValue, collectFileConstants, createFileCache, discoverUnits, emitConstantBindings, emitEntryFact, emitValueFacts, evaluatedValue, extractRubyProject, field, findRubyFiles, graphqlTypeNameFromQualified, hashKeySymbolName, inheritedStatements, methodDefinitionsIn, methodInAncestry, nodeId, parseRuby, parseRubySync, preloadRubyGrammar, qualifyConstantRef, reachDefinition, readCallArgs, readKey, resolveConstantFile, rubyStubEvidence, runStatements, stringLiteralValue, stringValueOf, symbolValue, typeShapeFromNode, underscoreConstantPath, unitKey, walkClasses, walkDefinitions };
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { Database } from '@suss/datalog';
|
|
|
4
4
|
import { TypeShape, BehavioralSummary } from '@suss/behavioral-ir';
|
|
5
5
|
import { RawCodeStructure, TimingReport, ExtractionReport, CacheDiagnostic } from '@suss/extractor';
|
|
6
6
|
import { WhyExplained } from '@suss/resolution';
|
|
7
|
+
import { Value } from '@suss/values';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* A new `Parser` for every call, so that parses running at the same time do
|
|
@@ -106,6 +107,13 @@ interface ClassInfo {
|
|
|
106
107
|
qualifiedName: string;
|
|
107
108
|
/** Null when it declares no superclass, or the expression is not a literal constant path. */
|
|
108
109
|
superclassQualifiedName: string | null;
|
|
110
|
+
/**
|
|
111
|
+
* Every name the superclass expression can resolve to, in the order Ruby
|
|
112
|
+
* tries them: each level of the enclosing nesting innermost first, then the
|
|
113
|
+
* bare name at top level. A compound path is one entry. Empty when there is
|
|
114
|
+
* no readable superclass.
|
|
115
|
+
*/
|
|
116
|
+
superclassCandidates: readonly string[];
|
|
109
117
|
/** `body_statement` node, or null for `class Foo; end`. */
|
|
110
118
|
bodyNode: Node | null;
|
|
111
119
|
/** `Module.nesting` in effect inside this class's own body, innermost first. */
|
|
@@ -255,6 +263,18 @@ interface ControllerActions {
|
|
|
255
263
|
ancestryRootClassNames: string[];
|
|
256
264
|
/** Status code a wire response gets when the action does not say otherwise. */
|
|
257
265
|
defaultStatusCode: number;
|
|
266
|
+
/** The receiverless calls the library gives an action for writing a wire status. Leave it out and every action reports the default. */
|
|
267
|
+
responseStatusCalls?: RbStatusCall[];
|
|
268
|
+
/** The number behind each name the library accepts where a status number could go, Rack's own symbol table for Rails. */
|
|
269
|
+
statusCodeNames?: Record<string, number>;
|
|
270
|
+
/**
|
|
271
|
+
* The methods every controller gets without defining them, which for
|
|
272
|
+
* Rails is `params`, `render` and the rest of what `ActionController`
|
|
273
|
+
* mixes in. An action's effect list is there to show what the action
|
|
274
|
+
* reaches in the project, and nothing in the project defines these,
|
|
275
|
+
* so a receiverless call to one of them is left off that list.
|
|
276
|
+
*/
|
|
277
|
+
inheritedMethodNames?: string[];
|
|
258
278
|
/** Absolute path of the file this pattern's own routing came from, for the one gap `routingGaps` may report. */
|
|
259
279
|
routesFile: string;
|
|
260
280
|
/** The method and path a project's own routing gives one controller's action, or null when that action has none. */
|
|
@@ -265,6 +285,25 @@ interface ControllerActions {
|
|
|
265
285
|
/** One message per routing declaration kind this pattern's reading left uncovered. A pure read: calling it again gives the same list. */
|
|
266
286
|
routingGaps?: () => readonly string[];
|
|
267
287
|
}
|
|
288
|
+
/**
|
|
289
|
+
* One call an action writes to send a response, and where that call takes
|
|
290
|
+
* the status. A call may take it both ways, and then the keyword wins,
|
|
291
|
+
* which is what Rails does with `head :ok, status: :created`.
|
|
292
|
+
*/
|
|
293
|
+
interface RbStatusCall {
|
|
294
|
+
/** The call's own name as an action writes it, `render` for Rails. */
|
|
295
|
+
name: string;
|
|
296
|
+
/** The keyword whose value gives the status, `status` for Rails. */
|
|
297
|
+
statusKeyword?: string;
|
|
298
|
+
/** The index of the positional argument giving the status, 0 for Rails' `head :no_content`. */
|
|
299
|
+
statusArgument?: number;
|
|
300
|
+
/**
|
|
301
|
+
* The status this call sends when the action writes none. Rails'
|
|
302
|
+
* `redirect_to` sends 302 where its `render` sends the controller's own
|
|
303
|
+
* default, so a default declared here wins over `defaultStatusCode`.
|
|
304
|
+
*/
|
|
305
|
+
defaultStatusCode?: number;
|
|
306
|
+
}
|
|
268
307
|
/** A class or module whose ancestry reaches one of `baseClassNames` declares GraphQL fields through DSL calls in its own body. */
|
|
269
308
|
interface GraphqlObjectFields {
|
|
270
309
|
type: "graphqlObjectFields";
|
|
@@ -321,20 +360,32 @@ interface RbStorageOptions {
|
|
|
321
360
|
readonly patterns: readonly RbStoragePattern[];
|
|
322
361
|
}
|
|
323
362
|
|
|
363
|
+
/** The methods a pack declared the library defines itself, so a receiverless call to one of them is not work the project does. */
|
|
364
|
+
type InheritedMethods = ReadonlySet<string>;
|
|
365
|
+
|
|
324
366
|
/** Parsed files by absolute path, so a class that several fields refer to is only parsed once. */
|
|
325
367
|
interface FileCache {
|
|
326
368
|
get(absPath: string): Promise<Node | null>;
|
|
327
369
|
}
|
|
328
370
|
declare function createFileCache(parse: (source: string) => Promise<Node>, readFile: (absPath: string) => string | null): FileCache;
|
|
329
|
-
|
|
371
|
+
/**
|
|
372
|
+
* What the run's packs said that reading a method body needs. An
|
|
373
|
+
* options object that already declares both fields, `DiscoveryOptions`
|
|
374
|
+
* among them, is one of these and can be passed straight through.
|
|
375
|
+
*/
|
|
376
|
+
interface BodyReadOptions {
|
|
377
|
+
/** What a pack needs to say a call talks to the database. Absent when no pack does. */
|
|
378
|
+
readonly storage?: RbStorageOptions | undefined;
|
|
379
|
+
/** The methods every pack in the run said its own library defines, which are left off an effect list. */
|
|
380
|
+
readonly inheritedMethods?: InheritedMethods | undefined;
|
|
381
|
+
}
|
|
382
|
+
interface DiscoveryOptions extends BodyReadOptions {
|
|
330
383
|
packs: RubyPack[];
|
|
331
384
|
/** Repo-relative or absolute path recorded on each summary's `location.file`. */
|
|
332
385
|
filePath: string;
|
|
333
386
|
/** Absolute path of the file being read, for a block's own `ReachedBody.file`. Falls back to `filePath` when nothing was written to disk. */
|
|
334
387
|
absoluteFile?: string;
|
|
335
388
|
cache: FileCache;
|
|
336
|
-
/** What a pack needs to say a call talks to the database. Absent when no pack does. */
|
|
337
|
-
storage?: RbStorageOptions | undefined;
|
|
338
389
|
/** Called once per discovered unit whose own body is a method this run can follow calls out of, so the reach walk has a place to start. */
|
|
339
390
|
onReachSeed?: (raw: RawCodeStructure, seed: ReachSeed) => void;
|
|
340
391
|
}
|
|
@@ -563,6 +614,37 @@ interface TypeReadContext {
|
|
|
563
614
|
*/
|
|
564
615
|
declare function typeShapeFromNode(node: Node, ctx: TypeReadContext): TypeShape | null;
|
|
565
616
|
|
|
617
|
+
/**
|
|
618
|
+
* One evaluator per project, over the parsed files and the resolution
|
|
619
|
+
* facts. A reader hands in a node and gets back the abstract value it
|
|
620
|
+
* comes down to; a route path or a prefix is then spelled from that
|
|
621
|
+
* value rather than read off one syntax shape.
|
|
622
|
+
*
|
|
623
|
+
* The facts key a node by file and span, so the evaluator keeps every
|
|
624
|
+
* file's root to find the node a fact refers to. Without facts,
|
|
625
|
+
* which is how a unit test or a routes file on its own runs, the
|
|
626
|
+
* evaluator still follows names within the file through the engine's
|
|
627
|
+
* own scope walk.
|
|
628
|
+
*/
|
|
629
|
+
|
|
630
|
+
interface EvaluatedFile {
|
|
631
|
+
readonly file: string;
|
|
632
|
+
readonly root: Node;
|
|
633
|
+
}
|
|
634
|
+
interface ProjectNodes {
|
|
635
|
+
readonly files: readonly EvaluatedFile[];
|
|
636
|
+
/** Every method definition by its node key, for a resolved callee. */
|
|
637
|
+
readonly definitions: ReadonlyMap<string, Node>;
|
|
638
|
+
}
|
|
639
|
+
/** Register the parsed project, so reads through `db` can follow the facts back to nodes. */
|
|
640
|
+
declare function bindEvaluator(db: Database, nodes: ProjectNodes): void;
|
|
641
|
+
/** The abstract value `node` comes down to, through the facts when `db` was bound. */
|
|
642
|
+
declare function evaluatedValue(node: Node, db?: Database): Value;
|
|
643
|
+
/** The one string `node` comes down to, or null when it does not settle on one. */
|
|
644
|
+
declare function stringValueOf(node: Node, db?: Database): string | null;
|
|
645
|
+
/** Every method a file defines, keyed the way the facts key it, for `bindEvaluator`. */
|
|
646
|
+
declare function methodDefinitionsIn(file: string, root: Node): Map<string, Node>;
|
|
647
|
+
|
|
566
648
|
/**
|
|
567
649
|
* version.ts: this adapter's own half of the cache key.
|
|
568
650
|
*
|
|
@@ -573,4 +655,4 @@ declare function typeShapeFromNode(node: Node, ctx: TypeReadContext): TypeShape
|
|
|
573
655
|
*/
|
|
574
656
|
declare const ADAPTER_VERSION = "0.1.0";
|
|
575
657
|
|
|
576
|
-
export { ADAPTER_VERSION, type AncestorEntry, type AncestorLookup, type Ancestry, type CallArgs, type ClassInfo, type ConstantPathConvention, type ControllerActions, type DiscoveryOptions, type ExtractRubyOptions, type ExtractRubyResult, type FileCache, type FileConstants, type GraphqlObjectFields, type GraphqlTypeNameConvention, type MethodLookup, type Range, type RbStoragePattern, type ReachedBody, type RubyDiscoveryPattern, type RubyExtendsSite, type RubyPack, type RubyRequireSite, type RubyStubEvidence, type RubyStubEvidenceOptions, type RubyValueHandle, RubyWhySession, type RubyWhySessionOptions, type TypeReadContext, ancestryOf, bodyStatements, booleanLiteralValue, collectFileConstants, createFileCache, discoverUnits, emitConstantBindings, emitEntryFact, emitValueFacts, extractRubyProject, field, findRubyFiles, graphqlTypeNameFromQualified, hashKeySymbolName, inheritedStatements, methodInAncestry, nodeId, parseRuby, parseRubySync, preloadRubyGrammar, qualifyConstantRef, reachDefinition, readCallArgs, readKey, resolveConstantFile, rubyStubEvidence, runStatements, stringLiteralValue, symbolValue, typeShapeFromNode, underscoreConstantPath, unitKey, walkClasses, walkDefinitions };
|
|
658
|
+
export { ADAPTER_VERSION, type AncestorEntry, type AncestorLookup, type Ancestry, type CallArgs, type ClassInfo, type ConstantPathConvention, type ControllerActions, type DiscoveryOptions, type EvaluatedFile, type ExtractRubyOptions, type ExtractRubyResult, type FileCache, type FileConstants, type GraphqlObjectFields, type GraphqlTypeNameConvention, type MethodLookup, type ProjectNodes, type Range, type RbStatusCall, type RbStoragePattern, type ReachedBody, type RubyDiscoveryPattern, type RubyExtendsSite, type RubyPack, type RubyRequireSite, type RubyStubEvidence, type RubyStubEvidenceOptions, type RubyValueHandle, RubyWhySession, type RubyWhySessionOptions, type TypeReadContext, ancestryOf, bindEvaluator, bodyStatements, booleanLiteralValue, collectFileConstants, createFileCache, discoverUnits, emitConstantBindings, emitEntryFact, emitValueFacts, evaluatedValue, extractRubyProject, field, findRubyFiles, graphqlTypeNameFromQualified, hashKeySymbolName, inheritedStatements, methodDefinitionsIn, methodInAncestry, nodeId, parseRuby, parseRubySync, preloadRubyGrammar, qualifyConstantRef, reachDefinition, readCallArgs, readKey, resolveConstantFile, rubyStubEvidence, runStatements, stringLiteralValue, stringValueOf, symbolValue, typeShapeFromNode, underscoreConstantPath, unitKey, walkClasses, walkDefinitions };
|