Skip to content

Commit fb7aad1

Browse files
committed
Update
1 parent 5da8330 commit fb7aad1

File tree

3 files changed

+22
-19
lines changed

3 files changed

+22
-19
lines changed

src/analysis/static/JavaScriptTargetPool.ts

+1
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ export class JavaScriptTargetPool extends TargetPool {
287287

288288
const objects: ComplexObject[] = []
289289

290+
//TODO the entire project should be searched for complex object types instead of dependencies only
290291
const objectGenerator = new ObjectGenerator()
291292
objects.push(...objectGenerator.generate(absoluteTargetPath, ast))
292293

src/analysis/static/types/resolving/TypeResolver.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { ComplexObject } from "../discovery/object/ComplexObject";
77
// TODO would be better if the typeresolver works for all files
88
export abstract class TypeResolver {
99
private _relationTyping: Map<Relation, Typing> // TODO should be probability distribution per typing
10-
private _elementTyping: Map<Element, Typing> // TODO should be probability distribution per typing
10+
private _elementTyping: Map<Element, Map<Typing, number>> // TODO should be probability distribution per typing
1111

1212
private _relationFullyResolved: Set<Relation> // TODO should be probability distribution per typing
1313

@@ -24,7 +24,7 @@ export abstract class TypeResolver {
2424
return this._relationTyping;
2525
}
2626

27-
get elementTyping(): Map<Element, Typing> {
27+
get elementTyping(): Map<Element, Map<Typing, number>> {
2828
return this._elementTyping;
2929
}
3030

src/analysis/static/types/resolving/logic/TypeResolverInference.ts

+19-17
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { Scope, ScopeType } from "../../discovery/Scope";
55
import { Element, isInstanceOfElement } from "../../discovery/Element";
66
import { ComplexObject } from "../../discovery/object/ComplexObject";
77

8-
export class TypeResolverInference extends TypeResolver{
8+
export class TypeResolverInference extends TypeResolver {
99

1010
private wrapperElementIsRelation: Map<string, Relation>
1111

@@ -19,9 +19,9 @@ export class TypeResolverInference extends TypeResolver{
1919
const typingsType = elementTypeToTypingType(element.type)
2020

2121
if (typingsType) {
22-
this.elementTyping.set(element, {
23-
type: typingsType
24-
})
22+
const probabilities = new Map()
23+
probabilities.set({ type: typingsType }, 1)
24+
this.elementTyping.set(element, probabilities)
2525
somethingSolved = true
2626
}
2727
}
@@ -54,9 +54,10 @@ export class TypeResolverInference extends TypeResolver{
5454

5555
// TODO find out wether function property or regular property
5656

57+
const probabilities = new Map()
58+
5759
// find best matching object
58-
let bestScore = -1
59-
let bestMatch = objects[0]
60+
let total = 0
6061
for (const object of objects) {
6162
let score = 0
6263
for (const prop of properties) {
@@ -65,22 +66,23 @@ export class TypeResolverInference extends TypeResolver{
6566
}
6667
}
6768

68-
if (score > bestScore) {
69-
bestScore = score
70-
bestMatch = object
69+
// atleast score of one?
70+
if (score > 0) {
71+
probabilities.set(<ComplexTyping>{
72+
type: TypingType.Object,
73+
name: object.name,
74+
import: object.import,
75+
}, score)
76+
total += score
7177
}
7278
}
7379

74-
if (bestScore === 0) {
75-
continue
80+
for (const obj of probabilities.keys()) {
81+
probabilities.set(obj, probabilities.get(obj) / total)
7682
}
7783

78-
this.elementTyping.set(element, <ComplexTyping>{
79-
type: TypingType.Object,
80-
name: bestMatch.name,
81-
import: bestMatch.import,
82-
})
83-
console.log(element, this.elementTyping.get(element))
84+
this.elementTyping.set(element, probabilities)
85+
// console.log(element, this.elementTyping.get(element))
8486
somethingSolved = true
8587
}
8688
// console.log(scopes)

0 commit comments

Comments
 (0)