iobroker.javascript
Version:
Rules Engine for ioBroker
4 lines • 3.49 kB
JavaScript
import{r as e}from"./rolldown-runtime-C0FnF6B9.js";import{f as t}from"./_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-CxICLr5Z.js";var n=e({buildCodeLenses:()=>l,computeFullSymbolRange:()=>a,findCodeLensSymbols:()=>s,findLeadingCommentsStart:()=>i,findSymbolAtLine:()=>o,findSymbolEndByBraces:()=>r,registerAiCodeLensProvider:()=>u});function r(e,t,n){let r=0,i=!1;for(let n=t-1;n<e.length;n++){let t=e[n];for(let e=0;e<t.length;e++){let a=t[e];if(a===`{`)r++,i=!0;else if(a===`}`&&(r--,i&&r===0))return n+1}}return n}function i(e,t){let n=t,r=t-2,i=0;for(;r>=0;){let t=e[r].trim();if(t===``){if(i>=1)break;i++,r--;continue}if(!(t.startsWith(`//`)||t.startsWith(`/*`)||t.startsWith(`*`)||t.endsWith(`*/`)))break;n=r+1,i=0,r--}return n}function a(e,t,n){let a=r(e,t,n);return{startLine:i(e,t),endLine:a}}function o(e,t){let n=s(e);if(!n.length)return null;let r=e.split(`
`),i=r.length;for(let e=0;e<n.length;e++){let o=n[e],s=e+1<n.length?n[e+1].line-1:i,c=a(r,o.line,s);if(t>=c.startLine&&t<=c.endLine)return{startLine:c.startLine,endLine:c.endLine,symbol:o}}return null}function s(e){if(!e)return[];let t=e.split(`
`),n=[],r=[{re:/^(?:export\s+)?(?:async\s+)?function\s+(\w+)/,kind:`function`},{re:/^(?:export\s+)?class\s+(\w+)/,kind:`class`},{re:/^(?:export\s+)?(?:const|let)\s+(\w+)\s*=\s*(?:async\s*)?(?:\([^)]*\)|\w+)\s*=>/,kind:`arrow`}];for(let e=0;e<t.length;e++){let i=t[e];for(let{re:t,kind:a}of r){let r=i.match(t);if(r!=null&&r[1]){n.push({name:r[1],kind:a,line:e+1});break}}}return n}var c={explainTitle:`💡 Explain`,refactorTitle:`🔧 Refactor`,testsTitle:`✅ Tests`,explainTooltip:(e,t)=>`Explain ${e} ${t}`,refactorTooltip:(e,t)=>`Refactor ${e} ${t}`,testsTooltip:(e,t)=>`Suggest tests for ${e} ${t}`};function l(e,t,n=c){let r=s(e);if(!r.length)return[];let i=e.split(`
`),o=i.length,l=[];for(let e=0;e<r.length;e++){let s=r[e],c=e+1<r.length?r[e+1].line-1:o,{startLine:u,endLine:d}=a(i,s.line,c);l.push({displayLine:s.line,startLine:u,endLine:d,commands:[{id:t,title:n.explainTitle,tooltip:n.explainTooltip(s.kind,s.name),arguments:[`explain`,u,d]},{id:t,title:n.refactorTitle,tooltip:n.refactorTooltip(s.kind,s.name),arguments:[`refactor`,u,d]},{id:t,title:n.testsTitle,tooltip:n.testsTooltip(s.kind,s.name),arguments:[`tests`,u,d]}]})}return l}function u(e,n,r){let i=n.addCommand(0,(t,...i)=>{let[a,o,s]=i,c=n.getModel();if(!c)return;let l=Math.max(1,Math.min(Number(o),c.getLineCount())),u=Math.max(l,Math.min(Number(s),c.getLineCount())),d=new e.Range(l,1,u,c.getLineMaxColumn(u));r(a,c.getValueInRange(d),l===u?`line ${l}`:`lines ${l}-${u}`,l,u)},``);if(!i)return{dispose:()=>void 0};let a={explainTitle:`💡 ${t.t(`Explain`)}`,refactorTitle:`🔧 ${t.t(`Refactor`)}`,testsTitle:`✅ ${t.t(`Tests`)}`,explainTooltip:(e,n)=>t.t(`Explain %s %s`,e,n),refactorTooltip:(e,n)=>t.t(`Refactor %s %s`,e,n),testsTooltip:(e,n)=>t.t(`Suggest tests for %s %s`,e,n)},o=[];for(let t of[`javascript`,`typescript`]){let n=e.languages.registerCodeLensProvider(t,{provideCodeLenses:(t,n)=>{let r=l(t.getValue(),i,a),o=[];for(let t of r)for(let n of t.commands)o.push({range:new e.Range(t.displayLine,1,t.displayLine,1),id:`${i}-${t.displayLine}-${n.title}`,command:{id:n.id,title:n.title,tooltip:n.tooltip,arguments:n.arguments}});return{lenses:o,dispose:()=>void 0}},resolveCodeLens:(e,t)=>t});o.push(n)}return{dispose(){o.forEach(e=>{try{e.dispose()}catch{}})}}}export{s as n,o as r,n as t};