yukigo 0.2.0 → 0.2.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.
Files changed (76) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/analyzer/index.d.ts +7 -0
  3. package/dist/analyzer/inspections/generic/generic.d.ts +1 -2
  4. package/dist/analyzer/inspections/generic/generic.js +2 -5
  5. package/dist/src/analyzer/GraphBuilder.d.ts +30 -0
  6. package/dist/src/analyzer/GraphBuilder.js +100 -0
  7. package/dist/src/analyzer/index.d.ts +59 -0
  8. package/dist/src/analyzer/index.js +152 -0
  9. package/dist/src/analyzer/inspections/functional/functional.d.ts +44 -0
  10. package/dist/src/analyzer/inspections/functional/functional.js +149 -0
  11. package/dist/src/analyzer/inspections/functional/smells.d.ts +16 -0
  12. package/dist/src/analyzer/inspections/functional/smells.js +98 -0
  13. package/dist/src/analyzer/inspections/generic/generic.d.ts +178 -0
  14. package/dist/src/analyzer/inspections/generic/generic.js +604 -0
  15. package/dist/src/analyzer/inspections/generic/smells.d.ts +61 -0
  16. package/dist/src/analyzer/inspections/generic/smells.js +349 -0
  17. package/dist/src/analyzer/inspections/imperative/imperative.d.ts +35 -0
  18. package/dist/src/analyzer/inspections/imperative/imperative.js +109 -0
  19. package/dist/src/analyzer/inspections/imperative/smells.d.ts +16 -0
  20. package/dist/src/analyzer/inspections/imperative/smells.js +58 -0
  21. package/dist/src/analyzer/inspections/logic/logic.d.ts +32 -0
  22. package/dist/src/analyzer/inspections/logic/logic.js +96 -0
  23. package/dist/src/analyzer/inspections/logic/smells.d.ts +15 -0
  24. package/dist/src/analyzer/inspections/logic/smells.js +60 -0
  25. package/dist/src/analyzer/inspections/object/object.d.ts +90 -0
  26. package/dist/src/analyzer/inspections/object/object.js +321 -0
  27. package/dist/src/analyzer/inspections/object/smells.d.ts +30 -0
  28. package/dist/src/analyzer/inspections/object/smells.js +135 -0
  29. package/dist/src/analyzer/utils.d.ts +30 -0
  30. package/dist/src/analyzer/utils.js +78 -0
  31. package/dist/src/index.d.ts +4 -0
  32. package/dist/src/index.js +4 -0
  33. package/dist/src/interpreter/components/EnvBuilder.d.ts +21 -0
  34. package/dist/src/interpreter/components/EnvBuilder.js +155 -0
  35. package/dist/src/interpreter/components/Operations.d.ts +14 -0
  36. package/dist/src/interpreter/components/Operations.js +84 -0
  37. package/dist/src/interpreter/components/PatternMatcher.d.ts +73 -0
  38. package/dist/src/interpreter/components/PatternMatcher.js +358 -0
  39. package/dist/src/interpreter/components/RuntimeContext.d.ts +35 -0
  40. package/dist/src/interpreter/components/RuntimeContext.js +93 -0
  41. package/dist/src/interpreter/components/TestRunner.d.ts +19 -0
  42. package/dist/src/interpreter/components/TestRunner.js +110 -0
  43. package/dist/src/interpreter/components/Visitor.d.ts +71 -0
  44. package/dist/src/interpreter/components/Visitor.js +638 -0
  45. package/dist/src/interpreter/components/logic/LogicEngine.d.ts +29 -0
  46. package/dist/src/interpreter/components/logic/LogicEngine.js +259 -0
  47. package/dist/src/interpreter/components/logic/LogicResolver.d.ts +53 -0
  48. package/dist/src/interpreter/components/logic/LogicResolver.js +484 -0
  49. package/dist/src/interpreter/components/logic/LogicTranslator.d.ts +14 -0
  50. package/dist/src/interpreter/components/logic/LogicTranslator.js +99 -0
  51. package/dist/src/interpreter/components/runtimes/FunctionRuntime.d.ts +12 -0
  52. package/dist/src/interpreter/components/runtimes/FunctionRuntime.js +149 -0
  53. package/dist/src/interpreter/components/runtimes/LazyRuntime.d.ts +19 -0
  54. package/dist/src/interpreter/components/runtimes/LazyRuntime.js +269 -0
  55. package/dist/src/interpreter/components/runtimes/ObjectRuntime.d.ts +35 -0
  56. package/dist/src/interpreter/components/runtimes/ObjectRuntime.js +126 -0
  57. package/dist/src/interpreter/errors.d.ts +19 -0
  58. package/dist/src/interpreter/errors.js +36 -0
  59. package/dist/src/interpreter/index.d.ts +24 -0
  60. package/dist/src/interpreter/index.js +41 -0
  61. package/dist/src/interpreter/trampoline.d.ts +17 -0
  62. package/dist/src/interpreter/trampoline.js +38 -0
  63. package/dist/src/interpreter/utils.d.ts +11 -0
  64. package/dist/src/interpreter/utils.js +65 -0
  65. package/dist/src/tester/index.d.ts +25 -0
  66. package/dist/src/tester/index.js +113 -0
  67. package/dist/src/utils/helpers.d.ts +13 -0
  68. package/dist/src/utils/helpers.js +52 -0
  69. package/dist/utils/helpers.d.ts +5 -1
  70. package/dist/utils/helpers.js +82 -6
  71. package/package.json +4 -2
  72. package/src/analyzer/index.ts +9 -0
  73. package/src/analyzer/inspections/generic/generic.ts +2 -6
  74. package/src/utils/helpers.ts +112 -10
  75. package/tests/analyzer/helpers.spec.ts +16 -10
  76. package/tests/tester/Tester.spec.ts +0 -1
@@ -0,0 +1,98 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Call, VariablePattern, Variable, StopTraversalException, BooleanPrimitive, Application, isUnguardedBody, Otherwise, } from "yukigo-ast";
8
+ import { AutoScoped, ScopedVisitor } from "../../utils.js";
9
+ import { Uses } from "../generic/generic.js";
10
+ let HasRedundantLambda = class HasRedundantLambda extends ScopedVisitor {
11
+ visitLambda(node) {
12
+ if (node.parameters.length !== 1)
13
+ return;
14
+ if (!(node.body instanceof Application))
15
+ return;
16
+ const param = node.parameters[0];
17
+ const call = node.body;
18
+ if (call.functionExpr instanceof Application ||
19
+ call.functionExpr instanceof Call)
20
+ return;
21
+ const arg = call.parameter;
22
+ if (param instanceof VariablePattern &&
23
+ arg instanceof Variable &&
24
+ param.name.value === arg.identifier.value)
25
+ throw new StopTraversalException();
26
+ }
27
+ };
28
+ HasRedundantLambda = __decorate([
29
+ AutoScoped
30
+ ], HasRedundantLambda);
31
+ export { HasRedundantLambda };
32
+ let HasRedundantGuards = class HasRedundantGuards extends ScopedVisitor {
33
+ visitEquation(node) {
34
+ if (isUnguardedBody(node.body))
35
+ return;
36
+ // If there is only 1 guard...
37
+ if (node.body.length === 1) {
38
+ const guard = node.body[0];
39
+ // ...and that guard is "True" or "otherwise"
40
+ if (this.isAlwaysTrue(guard.condition))
41
+ throw new StopTraversalException();
42
+ }
43
+ }
44
+ isAlwaysTrue(node) {
45
+ // check for boolean literal 'True'
46
+ if (node instanceof BooleanPrimitive && node.value === true)
47
+ return true;
48
+ // check for default case
49
+ if (node instanceof Otherwise)
50
+ return true;
51
+ return false;
52
+ }
53
+ };
54
+ HasRedundantGuards = __decorate([
55
+ AutoScoped
56
+ ], HasRedundantGuards);
57
+ export { HasRedundantGuards };
58
+ let ShouldUseOtherwise = class ShouldUseOtherwise extends ScopedVisitor {
59
+ visitGuardedBody(node) {
60
+ if (node.condition instanceof BooleanPrimitive &&
61
+ node.condition.value === true)
62
+ throw new StopTraversalException();
63
+ }
64
+ };
65
+ ShouldUseOtherwise = __decorate([
66
+ AutoScoped
67
+ ], ShouldUseOtherwise);
68
+ export { ShouldUseOtherwise };
69
+ let HasRedundantParameter = class HasRedundantParameter extends ScopedVisitor {
70
+ visitEquation(node) {
71
+ for (const pattern of node.patterns) {
72
+ if (pattern instanceof VariablePattern) {
73
+ const paramName = pattern.name.value;
74
+ const usageChecker = new Uses(paramName, this.binding);
75
+ try {
76
+ node.accept(usageChecker);
77
+ // uses didnt throw so the param is not being used
78
+ throw new StopTraversalException();
79
+ }
80
+ catch (e) {
81
+ if (e instanceof StopTraversalException)
82
+ continue;
83
+ throw e;
84
+ }
85
+ }
86
+ }
87
+ }
88
+ };
89
+ HasRedundantParameter = __decorate([
90
+ AutoScoped
91
+ ], HasRedundantParameter);
92
+ export { HasRedundantParameter };
93
+ export const functionalSmells = {
94
+ HasRedundantGuards: HasRedundantGuards,
95
+ HasRedundantLambda: HasRedundantLambda,
96
+ HasRedundantParameter: HasRedundantParameter,
97
+ ShouldUseOtherwise: ShouldUseOtherwise,
98
+ };
@@ -0,0 +1,178 @@
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, Try, TypeAlias, TypeSignature, TypeVar, Variable } from "yukigo-ast";
2
+ import { VisitorConstructor, ScopedVisitor, InspectionVisitor } from "../../utils.js";
3
+ export declare class Assigns extends ScopedVisitor {
4
+ private readonly targetIdentifier;
5
+ constructor(targetIdentifier: string, scope?: string);
6
+ visitVariable(node: Variable): void;
7
+ visitAttribute(node: Attribute): void;
8
+ visitAssignment(node: Assignment): void;
9
+ }
10
+ export declare class Calls extends ScopedVisitor {
11
+ private readonly targetCallee;
12
+ constructor(targetCallee: string, scope?: string);
13
+ visitCall(node: Call): void;
14
+ }
15
+ export declare class Declares extends ScopedVisitor {
16
+ private readonly targetIdentifier;
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;
28
+ }
29
+ export declare class DeclaresComputation extends ScopedVisitor {
30
+ private readonly callName;
31
+ constructor(callName: string, scope?: string);
32
+ visitFunction(node: Function): void;
33
+ visitMethod(node: Method): void;
34
+ visitProcedure(node: Procedure): void;
35
+ visitFact(node: Fact): void;
36
+ visitRule(node: Rule): void;
37
+ }
38
+ export declare class DeclaresComputationWithArity extends ScopedVisitor {
39
+ private readonly targetArity;
40
+ constructor(targetArity: string, scope?: string);
41
+ visitFunction(node: Function): void;
42
+ visitMethod(node: Method): void;
43
+ visitProcedure(node: Procedure): void;
44
+ visitFact(node: Fact): void;
45
+ visitRule(node: Rule): void;
46
+ }
47
+ export declare class DeclaresEntryPoint extends InspectionVisitor {
48
+ visitEntryPoint(node: EntryPoint): void;
49
+ }
50
+ export declare class DeclaresFunction extends ScopedVisitor {
51
+ private readonly targetBinding;
52
+ constructor(targetBinding: string, scope?: string);
53
+ visitFunction(node: Function): void;
54
+ }
55
+ export declare class DeclaresRecursively extends ScopedVisitor {
56
+ private readonly targetBinding;
57
+ constructor(targetBinding: string, scope?: string);
58
+ visitFunction(node: Function): void;
59
+ visitMethod(node: Method): void;
60
+ visitProcedure(node: Procedure): void;
61
+ visitFact(node: Fact): void;
62
+ visitRule(node: Rule): void;
63
+ visitNested(node: ASTNode): void;
64
+ }
65
+ export declare class HasDirectRecursion extends InspectionVisitor {
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
+ }
76
+ export declare class DeclaresTypeAlias extends InspectionVisitor {
77
+ private readonly typeAliasName;
78
+ constructor(typeAliasName: string);
79
+ visitTypeAlias(node: TypeAlias): void;
80
+ }
81
+ export declare class DeclaresTypeSignature extends InspectionVisitor {
82
+ private readonly targetBinding;
83
+ constructor(targetBinding: string);
84
+ visitTypeSignature(node: TypeSignature): void;
85
+ }
86
+ export declare class DeclaresVariable extends ScopedVisitor {
87
+ private readonly targetBinding;
88
+ constructor(targetBinding: string, scope?: string);
89
+ visitVariable(node: Variable): void;
90
+ }
91
+ export declare class Raises extends ScopedVisitor {
92
+ constructor(scope: string);
93
+ visitRaise(node: Raise): void;
94
+ }
95
+ export declare class Uses extends ScopedVisitor {
96
+ private readonly targetBinding;
97
+ constructor(targetBinding: string, scope?: string);
98
+ visitSymbolPrimitive(node: SymbolPrimitive): void;
99
+ }
100
+ export declare class UsesArithmetic extends ScopedVisitor {
101
+ constructor(scope?: string);
102
+ visitArithmeticBinaryOperation(node: ArithmeticBinaryOperation): void;
103
+ visitArithmeticUnaryOperation(node: ArithmeticUnaryOperation): void;
104
+ }
105
+ export declare class UsesConditional extends ScopedVisitor {
106
+ visitIf(node: If): void;
107
+ }
108
+ export declare class UsesLogic extends ScopedVisitor {
109
+ constructor(scope?: string);
110
+ visitLogicalBinaryOperation(node: LogicalBinaryOperation): void;
111
+ visitLogicalUnaryOperation(node: LogicalUnaryOperation): void;
112
+ }
113
+ export declare class UsesPrint extends ScopedVisitor {
114
+ constructor(scope?: string);
115
+ visitPrint(node: Print): void;
116
+ }
117
+ export declare class UsesType extends ScopedVisitor {
118
+ private readonly targetBinding;
119
+ constructor(targetBinding: string, scope?: string);
120
+ visitTypeSignature(node: TypeSignature): void;
121
+ visitSimpleType(node: SimpleType): void;
122
+ visitTypeVar(node: TypeVar): void;
123
+ }
124
+ export declare class HasBinding extends ScopedVisitor {
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;
130
+ visitTypeAlias(node: TypeAlias): void;
131
+ visitTypeSignature(node: TypeSignature): void;
132
+ visitRecord(node: RecordNode): void;
133
+ }
134
+ export declare class SubordinatesDeclarationsTo extends InspectionVisitor {
135
+ private childName;
136
+ private parentName;
137
+ constructor(childName: string, parentName: string);
138
+ visitFunction(node: Function): void;
139
+ }
140
+ export declare class SubordinatesDeclarationsToEntryPoint extends InspectionVisitor {
141
+ private childName;
142
+ constructor(childName: string);
143
+ visitEntryPoint(node: EntryPoint): void;
144
+ }
145
+ export declare class TypesAs extends InspectionVisitor {
146
+ private typeName;
147
+ private bindingName;
148
+ constructor(typeName: string, bindingName: string);
149
+ visitTypeSignature(node: TypeSignature): void;
150
+ }
151
+ export declare class TypesParameterAs extends InspectionVisitor {
152
+ private paramIndex;
153
+ private typeName;
154
+ private bindingName;
155
+ constructor(paramIndex: number, typeName: string, bindingName: string);
156
+ visitTypeSignature(node: TypeSignature): void;
157
+ }
158
+ export declare class TypesReturnAs extends InspectionVisitor {
159
+ private typeName;
160
+ private bindingName;
161
+ constructor(typeName: string, bindingName: string);
162
+ visitTypeSignature(node: TypeSignature): void;
163
+ }
164
+ export declare class Rescues extends ScopedVisitor {
165
+ private exceptionName;
166
+ constructor(exceptionName: string, scope?: string);
167
+ visitCatch(node: Catch): void;
168
+ }
169
+ export declare class UsesExceptionHandling extends ScopedVisitor {
170
+ constructor(scope?: string);
171
+ visitTry(node: Try): void;
172
+ }
173
+ export declare class UsesExceptions extends ScopedVisitor {
174
+ constructor(scope?: string);
175
+ visitTry(node: Try): void;
176
+ visitRaise(node: Raise): void;
177
+ }
178
+ export declare const genericInspections: Record<string, VisitorConstructor>;