From e2602657b4f5280a10e3f7157f84b63520a42f51 Mon Sep 17 00:00:00 2001 From: Stefan Date: Thu, 4 Jul 2024 15:44:26 +0200 Subject: [PATCH] feat: update function definitions p1 --- packages/jdm-editor/src/completion.json | 30 +++++++++++++++++++ .../components/code-editor/extensions/zen.ts | 4 +-- packages/lezer-zen/src/parser.js | 18 +++++------ packages/lezer-zen/src/parser.terms.js | 6 ++-- packages/lezer-zen/src/zen.grammar | 4 ++- 5 files changed, 47 insertions(+), 15 deletions(-) diff --git a/packages/jdm-editor/src/completion.json b/packages/jdm-editor/src/completion.json index dc88ae9e..aae7c82e 100644 --- a/packages/jdm-editor/src/completion.json +++ b/packages/jdm-editor/src/completion.json @@ -65,6 +65,18 @@ "detail": "(str: string, pattern: string) -> string[]", "info": "Extracts matching substrings according to a pattern" }, + { + "label": "fuzzyMatch", + "type": "function", + "detail": "(haystack: string | string[], needle: string) -> number | number[]", + "info": "Performs a fuzzy search of the needle in the haystack, and returns the match score(s)." + }, + { + "label": "split", + "type": "function", + "detail": "(str: string, delimiter: string) -> string[]", + "info": "Splits a string into an array of substrings using the specified delimiter." + }, { "label": "abs", "type": "function", @@ -155,6 +167,12 @@ "detail": "(value: any) -> boolean", "info": "Converts the given value to a boolean." }, + { + "label": "type", + "type": "function", + "detail": "(value: T) -> string", + "info": "Returns a string representing the data type of the value." + }, { "label": "date", "type": "function", @@ -239,6 +257,18 @@ "detail": "(timestamp: number, unit: string) -> number", "info": "Returns the timestamp representing the end of a specified unit (e.g., day, month, year) based on a given timestamp." }, + { + "label": "keys", + "type": "function", + "detail": "(obj: object) -> string[]", + "info": "Returns an array of a given object's own enumerable property names." + }, + { + "label": "values", + "type": "function", + "detail": "(obj: object) -> any[]", + "info": "Returns an array of a given object's own enumerable property values." + }, { "label": "all", "type": "function", diff --git a/packages/jdm-editor/src/components/code-editor/extensions/zen.ts b/packages/jdm-editor/src/components/code-editor/extensions/zen.ts index effcb444..16db5c97 100644 --- a/packages/jdm-editor/src/components/code-editor/extensions/zen.ts +++ b/packages/jdm-editor/src/components/code-editor/extensions/zen.ts @@ -107,7 +107,7 @@ export const zenHighlightLight = syntaxHighlighting( HighlightStyle.define([ { tag: [t.bracket, t.operator, t.variableName, t.propertyName, t.content], color: '#080808' }, { tag: [t.number, t.bool], color: '#015cc5' }, - { tag: [t.function(t.variableName), t.keyword, t.self, t.special(t.brace)], color: '#6f42c1' }, + { tag: [t.function(t.variableName), t.keyword, t.self, t.special(t.brace), t.logicOperator], color: '#6f42c1' }, { tag: [t.string, t.meta, t.name, t.quote], color: '#077d16' }, { tag: t.invalid, color: '#cb2431' }, ]), @@ -117,7 +117,7 @@ export const zenHighlightDark = syntaxHighlighting( HighlightStyle.define([ { tag: [t.bracket, t.operator, t.variableName, t.propertyName, t.content], color: '#bdbec4' }, { tag: [t.number, t.bool], color: '#57a8f5' }, - { tag: [t.function(t.variableName), t.keyword, t.self, t.special(t.brace)], color: '#c87dbb' }, + { tag: [t.function(t.variableName), t.keyword, t.self, t.special(t.brace), t.logicOperator], color: '#c87dbb' }, { tag: [t.string, t.meta, t.name, t.quote], color: '#6aab73' }, { tag: t.invalid, color: '#cb2431' }, ]), diff --git a/packages/lezer-zen/src/parser.js b/packages/lezer-zen/src/parser.js index 583ac2ca..427fb7e0 100644 --- a/packages/lezer-zen/src/parser.js +++ b/packages/lezer-zen/src/parser.js @@ -4,13 +4,13 @@ import {zenHighlight} from "./highlight" const spec_identifier = {__proto__:null,true:12, false:12, null:14, and:58, or:60} export const parser = LRParser.deserialize({ version: 14, - states: "*OQVQPOOOzOQO'#C_O!VOSO'#C_OOQO'#Ca'#CaO!bQPO'#CfOVQPO'#ChOVQPO'#CmO#jQPO'#D]OOQO'#D^'#D^OOQO'#D]'#D]OOQO'#DS'#DSQVQPOOOOOO'#DT'#DTO$dOQO,58yOOQO,58y,58yOOOO'#DU'#DUO$oOSO,58yO$zQPO'#DVO%UQPO'#DeO%^QPO'#DeO%hQPO,59QO%mQPO,59SO'dQPO,59XO'iQWO,59YOVQPO,59]OVQPO,59]OVQPO,59]OVQPO,59]OOQO'#C|'#C|OVQPO,59gOOQO,59j,59jO'qQPO'#DQOOQO,59k,59kOVQPO'#DXO'xQPO,59mOVQPO,59]OVQPO,59]OOQO-E7Q-E7QOOOO-E7R-E7ROOQO1G.e1G.eOOOO-E7S-E7SO(yQPO,59qOOQO-E7T-E7TO)TQPO,5:POOQO1G.l1G.lOOQO1G.s1G.sOOQO'#Cp'#CpOOQO1G.t1G.tOVQPO1G.tO*vQPO1G.wO+WQPO1G.wO-XQPO1G.wO-cQPO1G.wO-mQPO1G/RO-tQPO'#DhO.OQPO,59lO.TQPO,59sOOQO-E7V-E7VO0qQPO1G.wO0xQPO1G.wO1PQPO7+$`OVQPO7+$mO1UQPO'#DWO1`QPO,5:SOOQO1G/W1G/WOOQO<Ru!SQ!VS!OX!WP!YWOX$kXY&hYZ(fZ[&h[p$kpq&hqr$krs%[st$ktu,{uw$kwx%vx!Q$k!Q![,{![!c$k!c!},{!}#R$k#R#S,{#S#T$k#T#o,{#o$f$k$f$g&h$g#BY,{#BY#BZ=t#BZ$IS,{$IS$I_=t$I_$JT,{$JT$JU=t$JU$KV,{$KV$KW=t$KW&FU,{&FU&FV=t&FV;'S,{;'S;=`.c<%l?HT,{?HT?HU=t?HUO,{", + tokenData: "A__R!WOX$kXY&hYZ)^Z[&h[p$kpq&hqr*Wrs+rst,Ytu,{uv.ivw$kwx/[xy/ryz0ez{1W{|1y|}2l}!O1y!O!P3_!P!Q5V!Q![5x![!]6}!]!^$k!^!_7p!_!`9[!`!a:R!a!b:z!b!c$k!c!},{!}#Om#BZ$IS,{$IS$I_>m$I_$JT,{$JT$JU>m$JU$KV,{$KV$KW>m$KW&FU,{&FU&FV>m&FV;'S,{;'S;=`.c<%l?HT,{?HT?HU>m?HUO,{U$rW!TQ!WSOY$kZr$krs%[sw$kwx%vx;'S$k;'S;=`&b<%lO$kS%aT!WSOY%[Zw%[x;'S%[;'S;=`%p<%lO%[S%sP;=`<%l%[Q%{T!TQOY%vZr%vs;'S%v;'S;=`&[<%lO%vQ&_P;=`<%l%vU&eP;=`<%l$k_&qk!TQ!WS!PXOX$kXY&hYZ(fZ[&h[p$kpq&hqr$krs%[sw$kwx%vx$f$k$f$g&h$g#BY$k#BY#BZ&h#BZ$IS$k$IS$I_&h$I_$JT$k$JT$JU&h$JU$KV$k$KV$KW&h$KW&FU$k&FU&FV&h&FV;'S$k;'S;=`&b<%l?HT$k?HT?HU&h?HUO$kX(kZ!PXXY(fYZ(fZ[(fpq(f$f$g(f#BY#BZ(f$IS$I_(f$JT$JU(f$KV$KW(f&FU&FV(f?HT?HU(f_)eZ!UU!PXXY(fYZ(fZ[(fpq(f$f$g(f#BY#BZ(f$IS$I_(f$JT$JU(f$KV$KW(f&FU&FV(f?HT?HU(fV*aY]P!TQ!WSOY$kZr$krs%[sw$kwx%vx!_$k!_!`+P!`;'S$k;'S;=`&b<%lO$kV+YWlP!TQ!WSOY$kZr$krs%[sw$kwx%vx;'S$k;'S;=`&b<%lO$kV+yT!SR!WSOY%[Zw%[x;'S%[;'S;=`%p<%lO%[V,cWSP!TQ!WSOY$kZr$krs%[sw$kwx%vx;'S$k;'S;=`&b<%lO$k_-Wc!TQ!WS!XP!ZWOY$kZr$krs%[st$ktu,{uw$kwx%vx!Q$k!Q![,{![!c$k!c!},{!}#R$k#R#S,{#S#T$k#T#o,{#o$g$k$g;'S,{;'S;=`.c<%lO,{_.fP;=`<%l,{V.rWgP!TQ!WSOY$kZr$krs%[sw$kwx%vx;'S$k;'S;=`&b<%lO$kV/cT!VT!TQOY%vZr%vs;'S%v;'S;=`&[<%lO%vV/{W`P!TQ!WSOY$kZr$krs%[sw$kwx%vx;'S$k;'S;=`&b<%lO$kV0nW_P!TQ!WSOY$kZr$krs%[sw$kwx%vx;'S$k;'S;=`&b<%lO$kV1aWhP!TQ!WSOY$kZr$krs%[sw$kwx%vx;'S$k;'S;=`&b<%lO$kV2SW^P!TQ!WSOY$kZr$krs%[sw$kwx%vx;'S$k;'S;=`&b<%lO$kV2uWZP!TQ!WSOY$kZr$krs%[sw$kwx%vx;'S$k;'S;=`&b<%lO$kV3hY!TQ!WScPOY$kZr$krs%[sw$kwx%vx!Q$k!Q![4W![;'S$k;'S;=`&b<%lO$kV4a[!TQ!WSQPOY$kZr$krs%[sw$kwx%vx!Q$k!Q![4W![#R$k#R#S4W#S;'S$k;'S;=`&b<%lO$kV5`WfP!TQ!WSOY$kZr$krs%[sw$kwx%vx;'S$k;'S;=`&b<%lO$kV6R^!TQ!WSQPOY$kZr$krs%[sw$kwx%vx!O$k!O!P4W!P!Q$k!Q![5x![#R$k#R#S5x#S;'S$k;'S;=`&b<%lO$kV7WWrP!TQ!WSOY$kZr$krs%[sw$kwx%vx;'S$k;'S;=`&b<%lO$kV7yYjP!TQ!WSOY$kZr$krs%[sw$kwx%vx!_$k!_!`8i!`;'S$k;'S;=`&b<%lO$kV8rWkP!TQ!WSOY$kZr$krs%[sw$kwx%vx;'S$k;'S;=`&b<%lO$kV9cY!TQ!WSOY$kZr$krs%[sw$kwx%vx!_$k!_!`+P!`;'S$k;'S;=`&b<%lO$kV:[YkP!TQ!WSOY$kZr$krs%[sw$kwx%vx!_$k!_!`8i!`;'S$k;'S;=`&b<%lO$kV;TY![P!TQ!WSOY$kZr$krs%[sw$kwx%vx!a$k!a!b;s!b;'S$k;'S;=`&b<%lO$kV;|WoP!TQ!WSOY$kZr$krs%[sw$kwx%vx;'S$k;'S;=`&b<%lO$k_TWiP!TQ!WSOY$kZr$krs%[sw$kwx%vx;'S$k;'S;=`&b<%lO$k_>zu!TQ!WS!PX!XP!ZWOX$kXY&hYZ(fZ[&h[p$kpq&hqr$krs%[st$ktu,{uw$kwx%vx!Q$k!Q![,{![!c$k!c!},{!}#R$k#R#S,{#S#T$k#T#o,{#o$f$k$f$g&h$g#BY,{#BY#BZ>m#BZ$IS,{$IS$I_>m$I_$JT,{$JT$JU>m$JU$KV,{$KV$KW>m$KW&FU,{&FU&FV>m&FV;'S,{;'S;=`.c<%l?HT,{?HT?HU>m?HUO,{", tokenizers: [0, 1, 2, 3], topRules: {"Standard":[0,1]}, - specialized: [{term: 54, get: (value) => spec_identifier[value] || -1}], - tokenPrec: 813 + specialized: [{term: 55, get: (value) => spec_identifier[value] || -1}], + tokenPrec: 918 }) diff --git a/packages/lezer-zen/src/parser.terms.js b/packages/lezer-zen/src/parser.terms.js index b589199c..7dc7a602 100644 --- a/packages/lezer-zen/src/parser.terms.js +++ b/packages/lezer-zen/src/parser.terms.js @@ -17,6 +17,6 @@ export const LessThan = 26, and = 29, or = 30, - questionOp = 32, - ArgList = 36, - SequenceExpression = 37 + questionOp = 33, + ArgList = 37, + SequenceExpression = 38 diff --git a/packages/lezer-zen/src/zen.grammar b/packages/lezer-zen/src/zen.grammar index 60ce599c..452d2cf0 100644 --- a/packages/lezer-zen/src/zen.grammar +++ b/packages/lezer-zen/src/zen.grammar @@ -10,6 +10,7 @@ equal @left, and @left, or @left, + nullCoalesce @left, ternary @right, comma @left } @@ -67,7 +68,8 @@ BinaryExpression { expressionNoComma !rel (LessThan | CompareOp<"<=" | ">" "="?>) expressionNoComma | expressionNoComma !equal CompareOp<"==" | "!="> expressionNoComma | expressionNoComma !and kw<"and"> expressionNoComma | - expressionNoComma !or kw<"or"> expressionNoComma + expressionNoComma !or kw<"or"> expressionNoComma | + expressionNoComma !nullCoalesce LogicOp<"??"> expressionNoComma } MemberExpression {