yukigo 0.1.0 → 0.2.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.
Files changed (144) hide show
  1. package/.mocharc.json +3 -3
  2. package/CHANGELOG.md +26 -0
  3. package/README.md +193 -199
  4. package/dist/analyzer/GraphBuilder.d.ts +29 -0
  5. package/dist/analyzer/GraphBuilder.js +99 -0
  6. package/dist/analyzer/index.d.ts +11 -23
  7. package/dist/analyzer/index.js +100 -58
  8. package/dist/analyzer/inspections/functional/functional.d.ts +44 -0
  9. package/dist/analyzer/inspections/functional/functional.js +149 -0
  10. package/dist/analyzer/inspections/functional/smells.d.ts +16 -0
  11. package/dist/analyzer/inspections/functional/smells.js +98 -0
  12. package/dist/analyzer/inspections/{generic.d.ts → generic/generic.d.ts} +70 -43
  13. package/dist/analyzer/inspections/generic/generic.js +604 -0
  14. package/dist/analyzer/inspections/generic/smells.d.ts +61 -0
  15. package/dist/analyzer/inspections/generic/smells.js +349 -0
  16. package/dist/analyzer/inspections/imperative/imperative.d.ts +35 -0
  17. package/dist/analyzer/inspections/imperative/imperative.js +109 -0
  18. package/dist/analyzer/inspections/imperative/smells.d.ts +16 -0
  19. package/dist/analyzer/inspections/imperative/smells.js +58 -0
  20. package/dist/analyzer/inspections/logic/logic.d.ts +32 -0
  21. package/dist/analyzer/inspections/logic/logic.js +96 -0
  22. package/dist/analyzer/inspections/logic/smells.d.ts +15 -0
  23. package/dist/analyzer/inspections/logic/smells.js +60 -0
  24. package/dist/analyzer/inspections/object/object.d.ts +88 -0
  25. package/dist/analyzer/inspections/object/object.js +319 -0
  26. package/dist/analyzer/inspections/object/smells.d.ts +30 -0
  27. package/dist/analyzer/inspections/object/smells.js +135 -0
  28. package/dist/analyzer/utils.d.ts +26 -4
  29. package/dist/analyzer/utils.js +71 -13
  30. package/dist/index.d.ts +1 -0
  31. package/dist/index.js +1 -0
  32. package/dist/interpreter/components/EnvBuilder.d.ts +9 -5
  33. package/dist/interpreter/components/EnvBuilder.js +100 -30
  34. package/dist/interpreter/components/Operations.d.ts +4 -4
  35. package/dist/interpreter/components/Operations.js +17 -2
  36. package/dist/interpreter/components/PatternMatcher.d.ts +47 -17
  37. package/dist/interpreter/components/PatternMatcher.js +264 -119
  38. package/dist/interpreter/components/RuntimeContext.d.ts +35 -0
  39. package/dist/interpreter/components/RuntimeContext.js +93 -0
  40. package/dist/interpreter/components/TestRunner.d.ts +18 -0
  41. package/dist/interpreter/components/TestRunner.js +103 -0
  42. package/dist/interpreter/components/Visitor.d.ts +63 -57
  43. package/dist/interpreter/components/Visitor.js +508 -173
  44. package/dist/interpreter/components/logic/LogicEngine.d.ts +29 -0
  45. package/dist/interpreter/components/logic/LogicEngine.js +259 -0
  46. package/dist/interpreter/components/logic/LogicResolver.d.ts +53 -0
  47. package/dist/interpreter/components/logic/LogicResolver.js +471 -0
  48. package/dist/interpreter/components/logic/LogicTranslator.d.ts +14 -0
  49. package/dist/interpreter/components/logic/LogicTranslator.js +99 -0
  50. package/dist/interpreter/components/runtimes/FunctionRuntime.d.ts +12 -0
  51. package/dist/interpreter/components/runtimes/FunctionRuntime.js +147 -0
  52. package/dist/interpreter/components/runtimes/LazyRuntime.d.ts +19 -0
  53. package/dist/interpreter/components/runtimes/LazyRuntime.js +269 -0
  54. package/dist/interpreter/components/runtimes/ObjectRuntime.d.ts +35 -0
  55. package/dist/interpreter/components/runtimes/ObjectRuntime.js +126 -0
  56. package/dist/interpreter/entities.d.ts +105 -0
  57. package/dist/interpreter/entities.js +96 -0
  58. package/dist/interpreter/errors.d.ts +1 -1
  59. package/dist/interpreter/index.d.ts +4 -12
  60. package/dist/interpreter/index.js +10 -13
  61. package/dist/interpreter/trampoline.d.ts +17 -0
  62. package/dist/interpreter/trampoline.js +38 -0
  63. package/dist/interpreter/utils.d.ts +4 -7
  64. package/dist/interpreter/utils.js +25 -17
  65. package/dist/tester/index.d.ts +25 -0
  66. package/dist/tester/index.js +108 -0
  67. package/dist/utils/helpers.d.ts +0 -4
  68. package/dist/utils/helpers.js +20 -24
  69. package/package.json +2 -2
  70. package/src/analyzer/GraphBuilder.ts +142 -0
  71. package/src/analyzer/index.ts +185 -132
  72. package/src/analyzer/inspections/functional/functional.ts +121 -0
  73. package/src/analyzer/inspections/functional/smells.ts +102 -0
  74. package/src/analyzer/inspections/{generic.ts → generic/generic.ts} +581 -499
  75. package/src/analyzer/inspections/generic/smells.ts +365 -0
  76. package/src/analyzer/inspections/imperative/imperative.ts +101 -0
  77. package/src/analyzer/inspections/imperative/smells.ts +54 -0
  78. package/src/analyzer/inspections/logic/logic.ts +90 -0
  79. package/src/analyzer/inspections/logic/smells.ts +54 -0
  80. package/src/analyzer/inspections/{object.ts → object/object.ts} +264 -282
  81. package/src/analyzer/inspections/object/smells.ts +144 -0
  82. package/src/analyzer/utils.ts +109 -26
  83. package/src/index.ts +3 -2
  84. package/src/interpreter/components/EnvBuilder.ts +202 -97
  85. package/src/interpreter/components/Operations.ts +99 -81
  86. package/src/interpreter/components/PatternMatcher.ts +475 -254
  87. package/src/interpreter/components/RuntimeContext.ts +119 -0
  88. package/src/interpreter/components/TestRunner.ts +151 -0
  89. package/src/interpreter/components/Visitor.ts +1065 -493
  90. package/src/interpreter/components/logic/LogicEngine.ts +519 -0
  91. package/src/interpreter/components/logic/LogicResolver.ts +858 -0
  92. package/src/interpreter/components/logic/LogicTranslator.ts +149 -0
  93. package/src/interpreter/components/runtimes/FunctionRuntime.ts +227 -0
  94. package/src/interpreter/components/runtimes/LazyRuntime.ts +334 -0
  95. package/src/interpreter/components/runtimes/ObjectRuntime.ts +224 -0
  96. package/src/interpreter/errors.ts +47 -47
  97. package/src/interpreter/index.ts +52 -59
  98. package/src/interpreter/trampoline.ts +71 -0
  99. package/src/interpreter/utils.ts +84 -79
  100. package/src/tester/index.ts +128 -0
  101. package/src/utils/helpers.ts +67 -73
  102. package/tests/analyzer/functional.spec.ts +207 -221
  103. package/tests/analyzer/generic.spec.ts +178 -100
  104. package/tests/analyzer/helpers.spec.ts +83 -83
  105. package/tests/analyzer/logic.spec.ts +237 -292
  106. package/tests/analyzer/oop.spec.ts +323 -338
  107. package/tests/analyzer/transitive.spec.ts +166 -0
  108. package/tests/interpreter/EnvBuilder.spec.ts +183 -178
  109. package/tests/interpreter/FunctionRuntime.spec.ts +223 -234
  110. package/tests/interpreter/LazyRuntime.spec.ts +225 -190
  111. package/tests/interpreter/LogicEngine.spec.ts +327 -194
  112. package/tests/interpreter/LogicSubstitution.spec.ts +80 -0
  113. package/tests/interpreter/ObjectRuntime.spec.ts +606 -0
  114. package/tests/interpreter/Operations.spec.ts +220 -220
  115. package/tests/interpreter/PatternSystem.spec.ts +213 -189
  116. package/tests/interpreter/Tests.spec.ts +122 -0
  117. package/tests/interpreter/interpreter.spec.ts +991 -937
  118. package/tests/tester/Tester.spec.ts +153 -0
  119. package/tsconfig.build.json +15 -7
  120. package/tsconfig.json +25 -17
  121. package/dist/analyzer/inspections/functional.d.ts +0 -46
  122. package/dist/analyzer/inspections/functional.js +0 -123
  123. package/dist/analyzer/inspections/generic.js +0 -427
  124. package/dist/analyzer/inspections/imperative.d.ts +0 -37
  125. package/dist/analyzer/inspections/imperative.js +0 -105
  126. package/dist/analyzer/inspections/logic.d.ts +0 -49
  127. package/dist/analyzer/inspections/logic.js +0 -140
  128. package/dist/analyzer/inspections/object.d.ts +0 -83
  129. package/dist/analyzer/inspections/object.js +0 -235
  130. package/dist/interpreter/components/FunctionRuntime.d.ts +0 -8
  131. package/dist/interpreter/components/FunctionRuntime.js +0 -52
  132. package/dist/interpreter/components/LazyRuntime.d.ts +0 -7
  133. package/dist/interpreter/components/LazyRuntime.js +0 -75
  134. package/dist/interpreter/components/LogicEngine.d.ts +0 -21
  135. package/dist/interpreter/components/LogicEngine.js +0 -152
  136. package/dist/interpreter/components/LogicResolver.d.ts +0 -11
  137. package/dist/interpreter/components/LogicResolver.js +0 -87
  138. package/src/analyzer/inspections/functional.ts +0 -159
  139. package/src/analyzer/inspections/imperative.ts +0 -129
  140. package/src/analyzer/inspections/logic.ts +0 -166
  141. package/src/interpreter/components/FunctionRuntime.ts +0 -79
  142. package/src/interpreter/components/LazyRuntime.ts +0 -97
  143. package/src/interpreter/components/LogicEngine.ts +0 -227
  144. package/src/interpreter/components/LogicResolver.ts +0 -130
@@ -1,35 +1,43 @@
1
- import { ArithmeticBinaryOperation, ArithmeticUnaryOperation, Assignment, ASTNode, Attribute, Call, Catch, EntryPoint, Fact, Function, If, LogicalBinaryOperation, LogicalUnaryOperation, Method, Print, Procedure, Raise, Record as RecordNode, Rule, SimpleType, SymbolPrimitive, TraverseVisitor, Try, TypeAlias, TypeSignature, TypeVar, Variable } from "@yukigo/ast";
2
- import { InspectionMap } from "../utils.js";
3
- export declare class Assigns extends TraverseVisitor {
1
+ import { ArithmeticBinaryOperation, ArithmeticUnaryOperation, Assignment, ASTNode, Attribute, Call, Catch, Class, EntryPoint, Equation, Fact, Function, If, LogicalBinaryOperation, LogicalUnaryOperation, Method, Object, Print, Procedure, Raise, Record as RecordNode, Rule, SimpleType, SymbolPrimitive, TraverseVisitor, Try, TypeAlias, TypeSignature, TypeVar, Variable } from "yukigo-ast";
2
+ import { VisitorConstructor, ScopedVisitor } from "../../utils.js";
3
+ export declare class Assigns extends ScopedVisitor {
4
4
  private readonly targetIdentifier;
5
- constructor(targetIdentifier: string);
5
+ constructor(targetIdentifier: string, scope?: string);
6
6
  visitVariable(node: Variable): void;
7
7
  visitAttribute(node: Attribute): void;
8
8
  visitAssignment(node: Assignment): void;
9
9
  }
10
- export declare class Calls extends TraverseVisitor {
10
+ export declare class Calls extends ScopedVisitor {
11
11
  private readonly targetCallee;
12
- constructor(targetCallee: string);
12
+ constructor(targetCallee: string, scope?: string);
13
13
  visitCall(node: Call): void;
14
14
  }
15
- export declare class Declares extends TraverseVisitor {
15
+ export declare class Declares extends ScopedVisitor {
16
16
  private readonly targetIdentifier;
17
- constructor(targetIdentifier: string);
18
- visit(node: ASTNode): void;
17
+ constructor(targetIdentifier: string, scopeName?: string);
18
+ private check;
19
+ visitFunction(node: Function): void;
20
+ visitMethod(node: Method): void;
21
+ visitProcedure(node: Procedure): void;
22
+ visitRule(node: Rule): void;
23
+ visitFact(node: Fact): void;
24
+ visitVariable(node: Variable): void;
25
+ visitAttribute(node: Attribute): void;
26
+ visitTypeAlias(node: TypeAlias): void;
27
+ visitTypeSignature(node: TypeSignature): void;
19
28
  }
20
- export declare class DeclaresComputation extends TraverseVisitor {
29
+ export declare class DeclaresComputation extends ScopedVisitor {
21
30
  private readonly callName;
22
- constructor(callName: string);
31
+ constructor(callName: string, scope?: string);
23
32
  visitFunction(node: Function): void;
24
33
  visitMethod(node: Method): void;
25
34
  visitProcedure(node: Procedure): void;
26
35
  visitFact(node: Fact): void;
27
36
  visitRule(node: Rule): void;
28
37
  }
29
- export declare class DeclaresComputationWithArity extends TraverseVisitor {
30
- private readonly targetBinding;
38
+ export declare class DeclaresComputationWithArity extends ScopedVisitor {
31
39
  private readonly targetArity;
32
- constructor(targetBinding: string, targetArity: number);
40
+ constructor(targetArity: string, scope?: string);
33
41
  visitFunction(node: Function): void;
34
42
  visitMethod(node: Method): void;
35
43
  visitProcedure(node: Procedure): void;
@@ -39,14 +47,14 @@ export declare class DeclaresComputationWithArity extends TraverseVisitor {
39
47
  export declare class DeclaresEntryPoint extends TraverseVisitor {
40
48
  visitEntryPoint(node: EntryPoint): void;
41
49
  }
42
- export declare class DeclaresFunction extends TraverseVisitor {
50
+ export declare class DeclaresFunction extends ScopedVisitor {
43
51
  private readonly targetBinding;
44
- constructor(targetBinding: string);
52
+ constructor(targetBinding: string, scope?: string);
45
53
  visitFunction(node: Function): void;
46
54
  }
47
- export declare class DeclaresRecursively extends DeclaresComputation {
55
+ export declare class DeclaresRecursively extends ScopedVisitor {
48
56
  private readonly targetBinding;
49
- constructor(targetBinding: string);
57
+ constructor(targetBinding: string, scope?: string);
50
58
  visitFunction(node: Function): void;
51
59
  visitMethod(node: Method): void;
52
60
  visitProcedure(node: Procedure): void;
@@ -54,6 +62,17 @@ export declare class DeclaresRecursively extends DeclaresComputation {
54
62
  visitRule(node: Rule): void;
55
63
  visitNested(node: ASTNode): void;
56
64
  }
65
+ export declare class HasDirectRecursion extends TraverseVisitor {
66
+ private readonly binding;
67
+ private isInsideBody;
68
+ constructor(binding: string);
69
+ visitFunction(node: Function): void;
70
+ visitRule(node: Rule): void;
71
+ visitProcedure(node: Procedure): void;
72
+ visitMethod(node: Method): void;
73
+ visitEquation(node: Equation): void;
74
+ visitSymbolPrimitive(node: SymbolPrimitive): void;
75
+ }
57
76
  export declare class DeclaresTypeAlias extends TraverseVisitor {
58
77
  private readonly typeAliasName;
59
78
  constructor(typeAliasName: string);
@@ -64,44 +83,50 @@ export declare class DeclaresTypeSignature extends TraverseVisitor {
64
83
  constructor(targetBinding: string);
65
84
  visitTypeSignature(node: TypeSignature): void;
66
85
  }
67
- export declare class DeclaresVariable extends TraverseVisitor {
86
+ export declare class DeclaresVariable extends ScopedVisitor {
68
87
  private readonly targetBinding;
69
- constructor(targetBinding: string);
88
+ constructor(targetBinding: string, scope?: string);
70
89
  visitVariable(node: Variable): void;
71
90
  }
72
- export declare class Raises extends TraverseVisitor {
91
+ export declare class Raises extends ScopedVisitor {
92
+ constructor(scope: string);
73
93
  visitRaise(node: Raise): void;
74
94
  }
75
- export declare class Uses extends TraverseVisitor {
95
+ export declare class Uses extends ScopedVisitor {
76
96
  private readonly targetBinding;
77
- constructor(targetBinding: string);
97
+ constructor(targetBinding: string, scope?: string);
78
98
  visitSymbolPrimitive(node: SymbolPrimitive): void;
79
99
  }
80
- export declare class UsesArithmetic extends TraverseVisitor {
100
+ export declare class UsesArithmetic extends ScopedVisitor {
101
+ constructor(scope?: string);
81
102
  visitArithmeticBinaryOperation(node: ArithmeticBinaryOperation): void;
82
103
  visitArithmeticUnaryOperation(node: ArithmeticUnaryOperation): void;
83
104
  }
84
- export declare class UsesConditional extends TraverseVisitor {
105
+ export declare class UsesConditional extends ScopedVisitor {
85
106
  visitIf(node: If): void;
86
107
  }
87
- export declare class UsesLogic extends TraverseVisitor {
108
+ export declare class UsesLogic extends ScopedVisitor {
109
+ constructor(scope?: string);
88
110
  visitLogicalBinaryOperation(node: LogicalBinaryOperation): void;
89
111
  visitLogicalUnaryOperation(node: LogicalUnaryOperation): void;
90
112
  }
91
- export declare class UsesPrint extends TraverseVisitor {
113
+ export declare class UsesPrint extends ScopedVisitor {
114
+ constructor(scope?: string);
92
115
  visitPrint(node: Print): void;
93
116
  }
94
- export declare class UsesType extends TraverseVisitor {
117
+ export declare class UsesType extends ScopedVisitor {
95
118
  private readonly targetBinding;
96
- constructor(targetBinding: string);
119
+ constructor(targetBinding: string, scope?: string);
97
120
  visitTypeSignature(node: TypeSignature): void;
98
121
  visitSimpleType(node: SimpleType): void;
99
122
  visitTypeVar(node: TypeVar): void;
100
123
  }
101
- export declare class HasBinding extends TraverseVisitor {
102
- private readonly targetBinding;
103
- constructor(targetBinding: string);
124
+ export declare class HasBinding extends ScopedVisitor {
104
125
  visitFunction(node: Function): void;
126
+ visitObject(node: Object): void;
127
+ visitClass(node: Class): void;
128
+ visitRule(node: Rule): void;
129
+ visitFact(node: Fact): void;
105
130
  visitTypeAlias(node: TypeAlias): void;
106
131
  visitTypeSignature(node: TypeSignature): void;
107
132
  visitRecord(node: RecordNode): void;
@@ -118,34 +143,36 @@ export declare class SubordinatesDeclarationsToEntryPoint extends TraverseVisito
118
143
  visitEntryPoint(node: EntryPoint): void;
119
144
  }
120
145
  export declare class TypesAs extends TraverseVisitor {
121
- private bindingName;
122
146
  private typeName;
123
- constructor(bindingName: string, typeName: string);
147
+ private bindingName;
148
+ constructor(typeName: string, bindingName: string);
124
149
  visitTypeSignature(node: TypeSignature): void;
125
150
  }
126
151
  export declare class TypesParameterAs extends TraverseVisitor {
127
- private bindingName;
128
152
  private paramIndex;
129
153
  private typeName;
130
- constructor(bindingName: string, paramIndex: number, typeName: string);
154
+ private bindingName;
155
+ constructor(paramIndex: number, typeName: string, bindingName: string);
131
156
  visitTypeSignature(node: TypeSignature): void;
132
157
  }
133
158
  export declare class TypesReturnAs extends TraverseVisitor {
134
- private bindingName;
135
159
  private typeName;
136
- constructor(bindingName: string, typeName: string);
160
+ private bindingName;
161
+ constructor(typeName: string, bindingName: string);
137
162
  visitTypeSignature(node: TypeSignature): void;
138
163
  }
139
- export declare class Rescues extends TraverseVisitor {
164
+ export declare class Rescues extends ScopedVisitor {
140
165
  private exceptionName;
141
- constructor(exceptionName: string);
166
+ constructor(exceptionName: string, scope?: string);
142
167
  visitCatch(node: Catch): void;
143
168
  }
144
- export declare class UsesExceptionHandling extends TraverseVisitor {
169
+ export declare class UsesExceptionHandling extends ScopedVisitor {
170
+ constructor(scope?: string);
145
171
  visitTry(node: Try): void;
146
172
  }
147
- export declare class UsesExceptions extends TraverseVisitor {
173
+ export declare class UsesExceptions extends ScopedVisitor {
174
+ constructor(scope?: string);
148
175
  visitTry(node: Try): void;
149
176
  visitRaise(node: Raise): void;
150
177
  }
151
- export declare const genericInspections: InspectionMap;
178
+ export declare const genericInspections: Record<string, VisitorConstructor>;