seems occur since first version that could compile those code.
type RecoType =
| 'DirectHit'
| 'TemplateMatch'
| 'FeatureMatch'
| 'ColorMatch'
| 'OCR'
| 'NeuralNetworkClassify'
| 'NeuralNetworkDetect'
| 'Custom'
type ActType =
| 'DoNothing'
| 'Click'
| 'Swipe'
| 'Key'
| 'Text'
| 'StartApp'
| 'StopApp'
| 'StopTask'
| 'Custom'
type OrderByMap = {
TemplateMatch: 'Horizontal' | 'Vertical' | 'Score' | 'Random'
FeatureMatch: 'Horizontal' | 'Vertical' | 'Score' | 'Area' | 'Random'
ColorMatch: 'Horizontal' | 'Vertical' | 'Score' | 'Area' | 'Random'
OCR: 'Horizontal' | 'Vertical' | 'Area' | 'Length' | 'Random'
NeuralNetworkClassify: 'Horizontal' | 'Vertical' | 'Score' | 'Random'
NeuralNetworkDetect: 'Horizontal' | 'Vertical' | 'Score' | 'Area' | 'Random'
}
type PipelineBuilderState<Json = {}> = {
done: Json
} & ('recognition' extends keyof Json
? {}
: {
recognition<R extends RecoType>(
reco: R
): PipelineRecognitionBuilderState<
Json & {
recognition: R
},
R
>
}) &
('action' extends keyof Json
? {}
: {
action<A extends ActType>(
act: A
): PipelineActionBuilderState<
Json & {
action: A
},
A
>
}) &
('next' extends keyof Json
? {}
: {
next<N extends string[]>(...nxt: [...N]): PipelineBuilderState<Json & { next: N }>
}) &
('interrupt' extends keyof Json
? {}
: {
interrupt<I extends string[]>(
...int: [...I]
): PipelineBuilderState<Json & { interrupt: I }>
}) &
('rate_limit' extends keyof Json
? {}
: {
rate_limit<R extends number>(rate: R): PipelineBuilderState<Json & { rate_limit: R }>
}) &
('timeout' extends keyof Json
? {}
: {
timeout<R extends number>(time: R): PipelineBuilderState<Json & { timeout: R }>
}) &
('on_error' extends keyof Json
? {}
: {
on_error<O extends string[]>(
...err: [...O]
): PipelineBuilderState<Json & { on_error: O }>
}) &
('inverse' extends keyof Json
? {}
: {
inverse<I extends boolean>(inv: I): PipelineBuilderState<Json & { inverse: I }>
}) &
('enabled' extends keyof Json
? {}
: {
enabled<E extends boolean>(en: E): PipelineBuilderState<Json & { enabled: E }>
}) &
('pre_delay' extends keyof Json
? {}
: {
pre_delay<P extends number>(pre: P): PipelineBuilderState<Json & { pre_delay: P }>
}) &
('post_delay' extends keyof Json // <--- here two post_delay are provided, which is the root cause
? {}
: {
post_delay<P extends number>(post: P): PipelineBuilderState<Json & { post_delay: P }>
}) &
('post_delay' extends keyof Json // <---
? {}
: {
post_delay<P extends number>(post: P): PipelineBuilderState<Json & { post_delay: P }>
}) &
('pre_wait_freezes' extends keyof Json
? {}
: {
pre_wait_freezes: PipelineWaitFreezeBuilderState<Json, 'pre_wait_freezes'>
}) &
('focus' extends keyof Json
? {}
: {
focus<F extends boolean>(focus: F): PipelineBuilderState<Json & { focus: F }>
})
type PipelineRecognitionBuilderState<PBJson, Reco extends RecoType, Json = {}> = {
done: PipelineBuilderState<PBJson & Json>
} & (Reco extends 'DirectHit'
? {}
: ('roi' extends keyof Json
? {}
: {
roi<R extends [string] | [number, number, number, number]>(
...roi: R
): PipelineRecognitionBuilderState<
PBJson,
Reco,
Json & { roi: R extends [number, number, number, number] ? R : R[0] }
>
}) &
('roi_offset' extends keyof Json
? {}
: {
roi_offset<R extends [number, number, number, number]>(
...roi: R
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { roi_offset: R }>
})) &
(Reco extends 'TemplateMatch' | 'FeatureMatch'
? 'template' extends keyof Json
? {}
: {
template<T extends string[]>(
...templ: [...T]
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { template: T }>
}
: {}) &
(Reco extends 'TemplateMatch' | 'NeuralNetworkDetect'
? 'threshold' extends keyof Json
? {}
: {
threshold<T extends number[]>(
...thres: [...T]
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { threshold: T }>
threshold$<T extends number>(
thres: T
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { threshold: T }>
}
: {}) &
(Reco extends keyof OrderByMap
? 'order_by' extends keyof Json
? {}
: {
order_by<O extends OrderByMap[Reco]>(
order: O
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { order_by: O }>
}
: {}) &
(Reco extends keyof OrderByMap
? 'index' extends keyof Json
? {}
: {
index<T extends number>(
idx: T
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { index: T }>
}
: {}) &
(Reco extends 'TemplateMatch'
? 'method' extends keyof Json
? {}
: {
method<M extends 1 | 3 | 5>(
method: M
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { method: M }>
}
: {}) &
(Reco extends 'ColorMatch'
? 'method' extends keyof Json
? {}
: {
method<M extends 4 | 40 | 6>(
method: M
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { method: M }>
}
: {}) &
(Reco extends 'TemplateMatch' | 'FeatureMatch'
? 'green_mask' extends keyof Json
? {}
: {
green_mask<G extends boolean>(
mask: G
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { green_mask: G }>
}
: {}) &
(Reco extends 'FeatureMatch' | 'ColorMatch'
? 'count' extends keyof Json
? {}
: {
count<C extends number>(
count: C
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { count: C }>
}
: {}) &
(Reco extends 'FeatureMatch'
? 'detector' extends keyof Json
? {}
: {
detector<D extends 'SIFT' | 'KAZE' | 'AKAZE' | 'BRISK' | 'ORB'>(
det: D
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { detector: D }>
}
: {}) &
(Reco extends 'FeatureMatch'
? 'ratio' extends keyof Json
? {}
: {
ratio<R extends number>(
ratio: R
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { ratio: R }>
}
: {}) &
(Reco extends 'ColorMatch'
? 'method' extends keyof Json
? ('lower' extends keyof Json
? {}
: Json['method'] extends 4 | 40
? {
lower<L extends [number, number, number][]>(
...lower: [...L]
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { lower: L }>
}
: {
lower<L extends [number][]>(
...lower: [...L]
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { lower: L }>
}) &
('upper' extends keyof Json
? {}
: Json['method'] extends 4 | 40
? {
upper<L extends [number, number, number][]>(
...upper: [...L]
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { upper: L }>
}
: {
upper<U extends [number][]>(
...upper: [...U]
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { upper: U }>
})
: {}
: {}) &
(Reco extends 'ColorMatch'
? 'connected' extends keyof Json
? {}
: {
connected<C extends boolean>(
conn: C
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { connected: C }>
}
: {}) &
(Reco extends 'OCR'
? 'expected' extends keyof Json
? {}
: {
expected<E extends string[]>(
...exp: [...E]
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { expected: E }>
}
: {}) &
(Reco extends 'NeuralNetworkClassify' | 'NeuralNetworkDetect'
? 'expected' extends keyof Json
? {}
: {
expected<E extends number[]>(
...exp: [...E]
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { expected: E }>
}
: {}) &
(Reco extends 'OCR'
? 'replace' extends keyof Json
? {}
: {
replace<R extends [string, string][]>(
...exp: [...R]
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { replace: R }>
}
: {}) &
(Reco extends 'OCR'
? 'only_rec' extends keyof Json
? {}
: {
only_rec<O extends boolean>(
rec: O
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { only_rec: O }>
}
: {}) &
(Reco extends 'OCR' | 'NeuralNetworkClassify' | 'NeuralNetworkDetect'
? 'model' extends keyof Json
? {}
: {
model<M extends string>(
model: M
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { model: M }>
}
: {}) &
(Reco extends 'NeuralNetworkClassify' | 'NeuralNetworkDetect'
? 'labels' extends keyof Json
? {}
: {
labels<L extends string[]>(
...label: [...L]
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { labels: L }>
}
: {}) &
(Reco extends 'Custom'
? 'custom_recognition' extends keyof Json
? {}
: {
custom_recognition<C extends string>(
reco: C
): PipelineRecognitionBuilderState<PBJson, Reco, Json & { custom_recognition: C }>
}
: {}) &
(Reco extends 'Custom'
? 'custom_recognition_param' extends keyof Json
? {}
: {
custom_recognition_param<C extends Record<string, unknown>>(
param: C
): PipelineRecognitionBuilderState<
PBJson,
Reco,
Json & { custom_recognition_param: C }
>
}
: {})
type PipelineActionBuilderState<PBJson, Act extends ActType, Json = {}> = {
done: PipelineBuilderState<PBJson & Json>
} & (Act extends 'Click' | 'Custom'
? 'target' extends keyof Json
? {}
: {
target<T extends [true] | [string] | [number, number, number, number]>(
...target: T
): PipelineActionBuilderState<
PBJson,
Act,
Json & { target: T extends [number, number, number, number] ? T : T[0] }
>
}
: {}) &
(Act extends 'Click' | 'Custom'
? 'target_offset' extends keyof Json
? {}
: {
target_offset<O extends [number, number, number, number]>(
...offset: O
): PipelineActionBuilderState<PBJson, Act, Json & { target_offset: O }>
}
: {}) &
(Act extends 'Swipe'
? 'begin' extends keyof Json
? {}
: {
begin<B extends [true] | [string] | [number, number, number, number]>(
...begin: B
): PipelineActionBuilderState<
PBJson,
Act,
Json & { begin: B extends [number, number, number, number] ? B : B[0] }
>
}
: {}) &
(Act extends 'Swipe'
? 'begin_offset' extends keyof Json
? {}
: {
begin_offset<B extends [number, number, number, number]>(
...offset: B
): PipelineActionBuilderState<PBJson, Act, Json & { begin_offset: B }>
}
: {}) &
(Act extends 'Swipe'
? 'end' extends keyof Json
? {}
: {
end<E extends [true] | [string] | [number, number, number, number]>(
...end: E
): PipelineActionBuilderState<
PBJson,
Act,
Json & { end: E extends [number, number, number, number] ? E : E[0] }
>
}
: {}) &
(Act extends 'Swipe'
? 'end_offset' extends keyof Json
? {}
: {
end_offset<E extends [number, number, number, number]>(
...offset: E
): PipelineActionBuilderState<PBJson, Act, Json & { end_offset: E }>
}
: {}) &
(Act extends 'Key'
? 'key' extends keyof Json
? {}
: {
key<K extends number[]>(
...key: [...K]
): PipelineActionBuilderState<PBJson, Act, Json & { key: K }>
}
: {}) &
(Act extends 'InputText'
? 'input_text' extends keyof Json
? {}
: {
input_text<T extends string>(
text: T
): PipelineActionBuilderState<PBJson, Act, Json & { input_text: T }>
}
: {}) &
(Act extends 'StartApp' | 'StopApp'
? 'package' extends keyof Json
? {}
: {
package<P extends string>(
pkg: P
): PipelineActionBuilderState<PBJson, Act, Json & { package: P }>
}
: {}) &
(Act extends 'Custom'
? 'custom_action' extends keyof Json
? {}
: {
custom_action<C extends string>(
act: C
): PipelineActionBuilderState<PBJson, Act, Json & { custom_action: C }>
}
: {}) &
(Act extends 'Custom'
? 'custom_action_param' extends keyof Json
? {}
: {
custom_action_param<C extends Record<string, unknown>>(
param: C
): PipelineActionBuilderState<PBJson, Act, Json & { custom_action_param: C }>
}
: {})
type PipelineWaitFreezeBuilderState<
PBJson,
Key extends 'pre_wait_freezes' | 'post_wait_freezes',
Json = {}
> = {
done: PipelineBuilderState<
PBJson & {
[key in Key]: Json
}
>
} & ('time' extends keyof Json
? {}
: {
time<T extends number>(
time: T
): PipelineWaitFreezeBuilderState<PBJson, Key, Json & { time: T }>
}) &
('target' extends keyof Json
? {}
: {
target<T extends [true] | [string] | [number, number, number, number]>(
...target: T
): PipelineWaitFreezeBuilderState<
PBJson,
Key,
Json & { target: T extends [number, number, number, number] ? T : T[0] }
>
}) &
('target_offset' extends keyof Json
? {}
: {
target_offset<O extends [number, number, number, number]>(
...offset: O
): PipelineWaitFreezeBuilderState<PBJson, Key, Json & { target_offset: O }>
}) &
('threshold' extends keyof Json
? {}
: {
threshold<T extends number>(
thres: T
): PipelineWaitFreezeBuilderState<PBJson, Key, Json & { threshold: T }>
}) &
('method' extends keyof Json
? {}
: {
method<M extends 1 | 3 | 5>(
met: M
): PipelineWaitFreezeBuilderState<PBJson, Key, Json & { method: M }>
}) &
('rate_limit' extends keyof Json
? {}
: {
rate_limit<R extends number>(
rate: R
): PipelineWaitFreezeBuilderState<PBJson, Key, Json & { rate_limit: R }>
})
const v = ({} as PipelineBuilderState).action('Click').done.
When requesting auto completion in the last row (via dot), the heap raise quickly.
The completion should either fail or succeed quickly. The duplicate edge shouldn't affect completing.
🔎 Search Terms
memory leak auto completion
🕗 Version & Regression Information
seems occur since first version that could compile those code.
Please forgive me for providing such a huge source code, as its complexity has to be kept to cause noticeable memory consumption rate (about 30MB/s, at least).
⏯ Playground Link
https://www.typescriptlang.org/play/?#code/C4TwDgpgBAShDGB7AKuaBeAUFHUA+UA5ACICWATgsABKnCHa4GHIQC2YANgIbAQCyveAAsGufEQBiEXgFdKg4CLFMiAYUSdE5RcsY5mAeTUwVBogDkI87pyvAA7toDWangGd3pAGYgzEwisbOwhHF2JQqn9mNVl3YEQ2BkxQSCgAQXhgVDSscWZiRAtEYGFSADsAc2j1TlJ4ZxrCAGUHUkgmgGkIP30A1gAPej7mZuBucmB0sDAmscQwadmRonmwZG53RpXCWPjE5NToQ3IAEwhyACEQQTAodCgAbz7WDh4+XWEALiJqbVIAF6IcrjTiEAIANQuwHqtnBoyQlHhRBg3HKpwOfWkcgUQm+v3+QJBcMh0NhYICzUREGRhHSlG4tNR6Mx4g0Wh0eJ+hD+5EBwNBtKhk3JtKp2hpAXpMiZaIxST6xhg3N5-OJFOYwph8BJzGljICABkIFVSrKWQrxEFyLZ7E5yK4PF5fCrCQLdUQtaLKdTzfL-NbbaF7c4Inwsq6+UTBaSRTqNatfVKGX7MQBfTApNBQAAK7QgdXKEEuslInHO5DGvAgAB4AFLuYH3J5pgB8zee4gxRZ+DeBmDTUAAZFAABSEShISrlOikYHgiBDE2ndxQZw9RDeKB98p9AD8Lb6P074lPk8Q09nwJrMCgi746NXcCQOQgrdHfVPZ4QiB+ME-p4AJQ-HmkCFhAz4XjOMLAiWZYVlWfA1gBX44Duw5PChqHiOel4weUf5YV+aYADREae-7YTgrYAWmgHDn047cFkc7lAuS6PmuG5bjuWEHo8GbYce5HiMx+E1ukd4cSuGRZK+74iahYk-Okik4MBub5uBmT4XB5YXIhtZqae6EjieVEWVAYmsSpxniKRdm4Kplm4DRFl0Qx4jjkWQzsQ+MnriAm7bo2u7YfxgmocJLk4D5wA1hYUn+au8R8lUADaAC674AHR5eUQw-OleU5RYmUaaBBYVMWpb6ZW4xIaZTxQHFPyJW25EeUOjGEBUfDkOQshgPQSXLqugXBbx4WHkJmExVAfUXINw01gAkqNnGpRUlRZQp83iCVfVFSVq2ZcZFVadVekIQ1tZNY8C0gktQ3AD860de59HdV5E7VgA+nUbB0H5Y1cUFPGhXxM1RXNMU2nwAOkED8W3veoPlLIbAAEYXO+8MQH+F1gVdtU3dW9ahRhD344jyN-lAH1UV1PUwmwECILII1o5xE0Q-200CVh0Uxaz7OczeG0yRj2O46OouEyBl1FtdBm3RTTZmVAosc69sAM25TNfT1wJ-Ut2ggzz3EhfzqERULsMuSbZvkDWhiSylwBpTt2UfvtuAlUtx15YYZ3zUTVXK6Tqvk-dUBOwN2g-G7jPYczP0VAAbhc7iStzAVW1NtvQ1+wsuZn2e1uteerljiCaDI5Tvpnb3h+BKv1THlOa+X5A529+udUbP0mtwWOcBApwW-n4PW2FReC7N5mWSPY8TzWACi7tQLX9dou+Jo-Ovrck-B0eNV3zUr+PpyHwPn2ebg45gJQf3nDwfhb7zs9QwvMNLxZz8ICvwLNwEANYcxb2ljjcg75AEgWPpHU+Hdz4a2aoA4B78QJ30Ng-HAT9EDxAwaAqe40C6QwFpFEuDtLJgAIcAIhYCIHVxapjaBsC6HwMVsTRBdVDLq3KFTKAtDCFv1AVglOqE06P0IMI+hoiP7MK-oXL8dtF7GVkQw8BkDWGy1kZwzS3CapIL4bHDR8jxEG1TkPaR6CHDcDoH9bwlAIAAggO4EhYNJrkPnpQ08pcaEvzsQ4pxEAXFuK4RHCAAB1exwBJDONce3ExoUSJEFsbExxCS3GEEsZI6xeDCDeEQPAOIHilHeJUcXPx1CLJFJKe4Gskgt473HnvUcdS4g-EkAgoxvC1axw6e4Lp2CrGZiOAYyJkE8KsSSWrHMlwdypMglvSCr5UnoQeAJdsmy+jdgJhMtuUdkG1nmU1HcNFBwjlHMs5hJAKBUFoMMcQqjcA-HHOQRApAylkJthQ8i-iXIfNIBLZh6UtpVEyhIdKUCLipJheQOFOiEUsJluQH2jkDp5SBYRP2PSpnQRmUcvhGLcCnJSSSnAkEyJ+3ELHbFetQXwsRai5l0DWUXEhQeW8f50oAAZIW+JcrkqxuDULvM+X9Tc3gc5c2kqQmeyjLIvJcgC-aQLJXeGlaEEFcqoDQqRey5FTKUXQPRTS1CJV6WUXNVAPFP5pmwSJXMhZKTYA-nWRfamEqpUyvphIlydF8ljhubqlg7AuDVk+LSbEwB5ACDxP4Z5RA+BvGrN8hVFSqLKqoqqlyKaI1IWQFvcF3s9o2pwCVfNnAg45WQKHGldqpwEsdcY51iy3VIA9agh6Vbqw-CLf6pm9sBJBuuT+LeYbU0fATQEQMIQwgOjDFEKGhBSiUHcMITQk9P4-LnhZbNajzVrrcZu8sNYi3MPhbtX25aoCVuEOumtdaSWNqglecoszyZkuBEs91s9BHHo3Vu-tA8SWAdPacAAJOe7RqKy3lsA-2l9ETwL4vfZ+pC37yi-s7f+zW4HgNQAHcKodi8pF4JDclTxW4TgVmuLcFd2gKx-Sxgo3V5TflZqqYemlTGLgsbAW7ZhtGLj0e4GAdKkEzW3r4+QJOyGDnVTQ7pJ1X6XU-o7YgLtAjNayYE0nEZllBWvJbKOyjoMv4iauDccTK6KjnAGOmrxnG-kqpqTFezi4YOXqRfBm1pBTgDCQ+a19DqP2qcw+p7DmntOCM80Fojhn3LDvI8G8dtzXgFvjUoUQK62alEQNuxRu7FIHr-iS-Lm7Tg1n4FvAAjBIAAzBIAArH581lXCs-H4ApyqqH7XNvC62tT7aqV4eap1m+UBauDtTilsz6XQ3sm0FGvLoQqtOb5nurjv8LK5sspNmrW8AAsEhju8okAANnazSyb3XetKwggN9DEWTlRZw1p8bD07vTaS6Rv+qWx1IAnZl942XlABBjXG1b01CCVGceUP6bBNiNB3RmlzPjFL7YsvD0JiPkdbBrAAcWaXXVpjcb3loJ84H4ROHuGOU4S4bkXRt-tjrjk0SOUe07+3NsjC3ge3Kh7iHLtJluclFyupAsgQSbe-i5MrVD-4xWlyCGsahYNsMpza1Xus1D08mc9lTzO3us9w7HXXPwNezckfN0VQPEATuF+D3LsPzjhgSOQOXirXOWWx1Rd3VBtA1mIBO5oq1JDIFpJ0dIAAtdetJ0gx-j7SS4MBVrNE6LSQwMBLg5O1+a93PxiAG-602l7JvwHvZi19qAgesiJygKHm3xE7ffUfuZzihBncw6Lr9GC3vM2+72+5wFvA5w6qo-Cm7ft4ZzhxQ2lDSmjdM76SN11Y26Xj9-HrFvp5jM4GPIDzvMldiaBWwmtbBWivsZKwrschAtAOAuIPjH9-dv7V7KFdKhBJuEEhcwqdgQOdhSlAPxKAV+E-hcDWIaFvPqiyiarCogWitehAVRCVFAXJnqiVIaPWrergKFoNhhqbhvmzp6lAJgT8LAXvgGqAf7n7JgTAXAfCplKgfgdhBgYgM-lgcVHlLgWgeIIQRXmvizqQebuQZQVANQSRn7KlvNOOENJAF7mjs5ttuaorp-rPD-n-gAbqkAVACAewWAaPuwYodAbAYygasgYaqwdJkYRwXlGYTwTgXgfYepEvkWIzi2iISQRppvuQU4VQbzjagfjSvQTak4TWAAKrMFIq2Ez5uF3qOEzAXA1pRGuFuFCHG4+FV5m6faxyBFQAxE0H7R0RY7cYmYjr24n6rhn4ci96VKEBIDlBFhZATyv5qGY5ubK4uTNGtF8DVYa7MItINwJHzR9FW6l7L7l7ZFkyiF+FkHdpQB9FUATxW7BGt787VGLZUaEBKiJq4AHiECLiQBtE35UYcadGVIf48Z+wnGrHVabzMIlpsG3oBwDBgA1rrwZExRZGr5zG+HRb+FLH3FnG3wlE4ChFH4C6O63Jzp2guBuCbDOgfzMDwnBjhCRBZAHE4BHGgkDEdGlYVFK4kr4lrxPG6pXp2E2rvGfHYF5TfFTGeEr7eEAm5FiH5HkFklTabwQkMxt6MQ1FED7ErqUARrwC5y37o5XGngaHiDhFfhik8ASmT6gxgqezbSpIlrxEF40q0k1owA-EuR-GslnyAkfaxaaxKnMT7K3h8lQmmbbGC6hoimw7AicAgB-STiEnv6hHykmEWTumemTiuyk67wU5oGTjyYhYeFPYzH-FmnskLHiFLFBlekIAGb2kCleRCl7EmC0jokLqOjIk+ComWDWA2jzohhLrYl5aFYFg+lKrEnVI9EHb1mcBHbPEalVBjExRsDtn3YxmKbMnxmmnHJJlAmLE6YTYDm-ZZlbHt4UY7GgyBAVlBhFlImeClkFlrlVmYke44nGGP6jwFjuIqFbZEk3Hlbmo8A4ycANIWG6ovHUnmoYEnnVr0k5T8FDl9bTFvqzGJlYYWm163mnlBHzkA4wkTp7AJCWh971KwXpmjlsTnny5NlXkknmoIWJBIX-msTq7FrdmVC9mAo-iTE-mPZeFDY5FAU14W5xCIW4SDbrEQVK7H7Lld4wWsjwUMU4VMXvp-RgATDcBJCoU+5dF+4BlUTYVsC4VhaCXCVsAEXMKQRnA1glqpIy7ODlBcGNwkU0KKXkWL7Dlxl4VjnEr4FAVoFUpoH0X7CyX8X4QKU2hsAsUkoyG2785jLZi-lFg6QJnjm0U6Rbw6RrL-qbJtgdi7LAj7K+W9JslYYYTnIDgYSjjBW3JuD1Co4xC8VwW4nJoTCVChCNnXEOmtlfjjDkBFXxQXq6rpSeyyAQCQoEDqlezNV6rGqdVWEsH6VfiVqFWhDBa-Gxn+XmVqwkpWXmo6TUo0qxyVXVUgaWEIFdXLVxHGFFr9p8oCrGQeWQlHiOmLljjpVLZ1ANBi65WHlHHzWhAapaqyoXF37oV+mVFgYDX0I+rapCZ1UrVsrWHIEvl6l5QfW6yGBMkQCjXUUJXV7TW17XXvWaq+pQDJy7X77ZmPzHW7GtD5iXVEA4yVAVAlU7bPWH5SXYR40VA1iXBwENVNVQralQo-VIGM1oq9XoF5Tk0ERQCXBg0Q3EHISWXvZoHTW2XkEc0-BU1LW-XM02HGFU3i1bX8nmoo32Ro14IY0rlY0dAroc23UyqE3D45qk2oQ63A2U2xGrUW1S1xGs0OE5TA3i080sRjXr4aYw2xwm0I2DVc0bGo0LmMTq1d6a00grrLj60SUj7lVUTLgbzU2DS00tX00tXS1-U9W6l+wBzoiHyO0AXjloGTW3rC34GxzLi3yS1M3dUV2oqcpQCbyHwK3E2oTK24BlWA4B2n5B043HHoi63FViVD7h2G2R3YTLg93xQUlUbwFW2W3l1V020WpA2e26zrzZ0BV8JBVZCWmXzd32010+0q1+1eRt21HdC9Cw6BRh2lXlFD2oSBQ1idCa4XCvHlolSBQ1qdBGmWQ9K82vYTmpJu3kGv1QD32sUtmt1ZATqrTlBgCcyDBPJ94VDQP0J8C+R91v6ynNn+nX1fgIOcx-TIM1WEVexz0VX3hDW4ojVO2Q2AXQ0b2144NIOkOJYgOYNgPABh6VVTAzBigJCLBcMrpCUNDcBFUX3oMYUtkkoCPOBCMnKEPbTEOnhgDOCVAgQr3O3zHRb-1LGSPSMWLGQt2jpH3qAXVS65V-TWTzioMylJpiOYMkoyVmOUPKVPlEXyOiQRhQD64UWGLf2V7r3ACb0PT2PmOc3W5N17UH3o3gMZXGOw5BOUPOUiUiPWMN0KmnhxNOVCUuVONUaqXVYaVQBaU6UOB6Vp37SZMiVGXkMmU+M0U0P+O17pOsQJOuUeN73N3zbeVpBxUxJ0DxKhKJI-19D504An0TrpLBJZJnnMAaJBL0IhJhLuIzVoSUwRWYDbLUJ7Kxl81YSJVmSKTpSBSPRAM9CZRf5oO+IXKpWrpIySkPXSn7hVL+6izeaUm+alMVU3NkOoQ9I9NxJZJ820Un0BNayfNMMkaA6rpvUiMaGpNw0vMT003tWtXbRIvJ3M0A0uT9VVVe3IDnSxm-N9NhLbPmrDP7RAskpzVvWLXfWV1T10scrrVQCbX8qK0xQo0Qtw2j3QvNmwtvWj2hll1Gq0sz2mryMlQ72g1hz4uxKEsDO+PV5Auw18sSs+0csPonpbrctiOwvqtAZnq1VT5vNga6tfMWQ-Myv-M-2As9DAsEblggZ74Qt-6WM-xlXGSHa1bMINYEDNYEBtbvNUT5aDnDUmUEuWvyvtqKuxw-Yzbsujr95AKAzAwusG22PzQ0xJsowP0wIBvYT4wL7GnSu9Phu1ORs2u14ZtIx0B+pxuZjNHxBQAZzNijgCRWSrhxXEGAQ5TBPjiZVnVdt7I5SYBAA
💻 Code
🙁 Actual behavior
When requesting auto completion in the last row (via dot), the heap raise quickly.
I've checked out that it is caused by the miss duplication of
post_delayproperty state changing edge.🙂 Expected behavior
The completion should either fail or succeed quickly. The duplicate edge shouldn't affect completing.
Additional information about the issue
No response