devicetree-language-server 0.14.4 → 0.14.6

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.
@@ -72,7 +72,7 @@ Repository: https://github.com/moxystudio/node-cross-spawn
72
72
 
73
73
  ----------------------------------------------------------------------
74
74
 
75
- devicetree-language-server@0.14.4
75
+ devicetree-language-server@0.14.6
76
76
  License: Apache-2.0
77
77
  Repository: https://github.com/kylebonnici/dts-lsp
78
78
 
package/dist/server.js CHANGED
@@ -342,9 +342,9 @@ ${JSON.stringify(e)}
342
342
  ${n}`]})];let o=i.node.implementations[0]instanceof nt?i.node.implementations[0]:i.node.implementations[0].identifierAst??i.node.implementations[0];return[x(25,o.firstToken,o.lastToken,o,{templateStrings:[`${e.message??"NO MESSAGE"}:
343
343
  ${JSON.stringify(e)}
344
344
  ${n}`]})]},kQ=(t,e)=>_B(t,e.split("/").filter(r=>r)),_B=(t,e)=>{if(e.length===0)return{node:t,remainingInstancePath:""};let r=e[0].split("@"),n=r[0],i=r.at(1)?.split(",").map(o=>Number.parseInt(o,16)),s=t.getNode(n,i);return s?_B(s,e.slice(1)):{node:t,property:t.getProperty(e[0]),remainingInstancePath:e.slice(1).join("/")}};var $P=class t{constructor(){this.schemaIdValidators=new Map;this.ajvMap=new Map}static getNodeCompatible(e){let n=e.getProperty("compatible")?.ast.values;if(!n?.values.some(i=>!(i?.value instanceof ne)))return n?.values.map(i=>(i?.value).value)}parseMetaSchema(e,r){Po.sync("**/*.yaml",{cwd:e}).forEach(i=>{i=(0,bc.resolve)(e,i);try{let s=qP.default.parse((0,LP.readFileSync)(i,"utf-8"));r.addMetaSchema(s),this.schemaIdValidators.set(s.$id,i)}catch{}})}parseBindings(e,r){Po.sync("**/*.yaml",{cwd:e}).forEach(i=>{i=(0,bc.resolve)(e,i);try{let s=qP.default.parse((0,LP.readFileSync)(i,"utf-8"));r.addSchema(s),this.schemaIdValidators.set(s.$id,i)}catch(s){console.warn(i,s.message)}})}getNodeTypes(e,r,n){let i=`${e.join(";")}::${r.join(";")}`,s=this.ajvMap.get(i);return s||(s=new kB.default({strict:!1,strictSchema:!1,strictNumbers:!1}),s.addMetaSchema(MP),this.ajvMap.set(i,s),e.forEach(c=>this.parseMetaSchema(c,s)),r.forEach(c=>this.parseBindings(c,s))),t.getNodeCompatible(n)?.map(c=>{try{let l=Array.from(this.schemaIdValidators.keys()).find(f=>(0,bc.basename)(f)===`${c}.yaml#`);if(!l)return;let u=new Tg(s,l);u.bindingsPath=this.schemaIdValidators.get(l),u.compatible=c;let d=s.getSchema(l);return u.description=(d?.schema).description,u.examples=(d?.schema).examples,u.maintainers=(d?.schema).maintainers,u}catch(l){console.warn(l.message)}}).filter(c=>c)??[]}getBindings(){return Array.from(this.schemaIdValidators.keys())}getBindingDocumentation(e,r,n){let i=`${e.join(";")}::${r.join(";")}`,s=this.ajvMap.get(i);if(!s)return;let o=Array.from(this.schemaIdValidators.keys()).find(d=>(0,bc.basename)(d)===`${n}.yaml#`);if(!o)return;let a=s.getSchema(o);if(!a)return;let c=a.schema.description,l=a.schema.examples,u=a.schema.maintainers;return{kind:Ri.Markdown,value:[...u?["### Maintainers",...u??[]]:[],...c?["### Description",Xi(c)]:[],...l?["### Examples","```devicetree",...l??[],"```"]:[]].join(`
345
- `)}}},PB,vg=()=>(PB??=new $P,PB);var Js=q(require("path")),Ju=require("fs"),AB=q(require("path")),IB=q(wS());var pn=q(U());var NB=()=>{let t=new W("nonposted-mmio",V("EMPTY"),"optional");return t.description=["Specifies that direct children of this bus should use non-posted memory accesses (i.e. a non-posted mapping mode) for MMIO ranges."],t};function RB(){let t=tn();t.noMismatchPropertiesAllowed=!0,t.compatible="simple-bus";let e=t.properties.find(n=>n.name==="compatible");e.required=()=>"required";let r=t.properties.find(n=>n.name==="ranges");return r.required=()=>"required",t.addProperty(NB()),t}var EB=(t,e)=>{switch(t){case"string":return typeof e=="string"?e:void 0;case"int":return typeof e=="number"?e:void 0;case"boolean":return;case"array":return Array.isArray(e)&&e.every(r=>typeof r=="number")?e:void 0;case"uint8-array":return Array.isArray(e)&&e.every(r=>typeof r=="number")?e:void 0;case"string-array":return Array.isArray(e)&&e.every(r=>typeof r=="string")?e:void 0;case"phandle":return;case"phandles":return;case"phandle-array":return;case"path":return;case"compound":return}},bg=(t,e)=>{if(Object.entries(e.properties??{}).forEach(([r,n])=>{n.name=r}),e.extends??=[],e=e.include.reduce((r,n)=>{let i=t.find(s=>(0,Js.basename)(s.filePath)===n.name);if(i){let s=n["property-blocklist"],o=n["property-allowlist"];e.extends?.push(...r.include.map(c=>(0,Js.basename)(c.name,".yaml")));let a=n["child-binding"];return r.include=r.include.filter(c=>c!==n),OB(t,i,r,s,o,a)??r}return console.warn(`Unable to find ${n.name}`),r},e),e["child-binding"]){let r=xB(e["child-binding"].include);e["child-binding"].include=r,e["child-binding"].rawInclude=[...r],e["child-binding"]=bg(t,e["child-binding"]),e["child-binding"]&&(e["child-binding"].isChildBinding=!0,e["child-binding"].filePath=e.filePath)}if(!e.include.length)return e},wB=t=>Array.isArray(t)?t:t?[t]:[],OB=(t,e,r,n=[],i,s)=>{let o=bg(t,e),a=bg(t,r);if(!o||!a)return;let c=new Set;Object.keys(o?.properties??{}).forEach(p=>c.add(p)),Object.keys(a?.properties??{}).forEach(p=>c.add(p));let l={};Array.from(c).forEach(p=>{let m=n?.some(y=>y===p)||i&&!i.some(y=>y===p)?void 0:o.properties?.[p]??void 0,h=a.properties?.[p]??void 0;(m||h)&&(l={...l,[p]:{...m??{},...h}})}),a.properties=l,a.extends??=[],a.extends.push(...o.extends??[]);let u=new Set;return Object.keys(o).filter(p=>p.endsWith("-cells")).forEach(p=>u.add(p)),Object.keys(o).filter(p=>p.endsWith("-cells")).forEach(p=>u.add(p)),Array.from(u).forEach(p=>{let m=o[p]??[],h=a[p]??[];a[p]=Array.from([...m,...h])}),(o.class||a.class)&&(a.class=[...new Set([...wB(a.class),...wB(o.class)])]),a.bus?a.bus.push(...o.bus??[]):a.bus=o.bus,o["child-binding"]&&(a["child-binding"]??={filePath:a.filePath,include:[],rawInclude:[],isChildBinding:!0},OB(t,o["child-binding"],a["child-binding"]??{filePath:a.filePath,include:[],rawInclude:[],isChildBinding:!0},s?.["property-blocklist"],s?.["property-allowlist"],s?.["child-binding"])),a},xB=t=>t?typeof t=="string"?[{name:t}]:t.map(e=>typeof e!="string"?e:{name:e}):[],FP=class t{constructor(){this.typeCache=new Map;this.contextBindings=new Map;this.processedFolders=new Set;this.zephyrBindingCache=new Map;this.vendorPrefixMap=new Map}static getCompatibleKeys(e,r){return!r||!r.nodeType?.bus?.length?[e]:[...r.nodeType.bus.map(n=>`${e}::${n}`),e]}getBaseZephyrType(e){let r=e.split(":");return Array.from(this.zephyrBindingCache.keys()).filter(i=>r.some(s=>i.startsWith(s))).flatMap(i=>this.zephyrBindingCache.get(i)).find(i=>i.filePath.endsWith(`${Js.default.sep}base.yaml`))}getBaseNodeType(e,r){let n=this.getBaseZephyrType(r),i=n?Sg(n,e):void 0;if(i){i.warnMismatchProperties=!1;let s=i.properties.find(o=>o.name==="compatible");s&&(s.required=()=>"optional")}return i}static getNodeCompatible(e){let i=e.getProperty("compatible")?.ast.values?.values.filter(s=>s&&s.value instanceof ne);if(i?.length)return i.map(s=>s?.value?{name:s.value.value,ast:s.value}:void 0)}getNodeTypes(e,r){let n=t.getNodeCompatible(e)?.filter(a=>!!a),i=n?.flatMap(a=>t.getCompatibleKeys(a.name,e.parent).map(c=>this.typeCache.get(r)?.get(c)?.(e)).filter(c=>!!c))??[];if(!i.length){let a;if(e.pathString==="/zephyr,user"){let c={},l={properties:c,filePath:"",include:[],rawInclude:[],isChildBinding:!1},u=(d,f)=>{c[d]={name:d,type:f}};e.properties.forEach(d=>{if(d.name.endsWith("-gpios")){u(d.name,"phandle-array");return}let f=d.ast.values?.values.map(m=>m?.value),p=f?.filter(m=>!!m);if(f===void 0||p===void 0)u(d.name,"boolean");else if(p.every(m=>m instanceof ne))u(d.name,f.length>1?"string-array":"string");else if(p.every(m=>m instanceof Lr))u(d.name,"uint8-array");else if(p.every(m=>m instanceof ut)){let m=p.flatMap(h=>h.values);m.every(h=>h.value instanceof ge)?u(d.name,m.length>1?"array":"int"):m.every(h=>h.value instanceof ie||h.value instanceof it)?u(d.name,m.length>1?"phandles":"phandle"):u(d.name,"phandle-array")}else u(d.name,"compound")}),a=Sg(l,e)}if(a){a.warnMismatchProperties=!1;let c=a.properties.find(l=>l.name==="compatible");c&&(c.required=()=>"optional")}return{type:[a??To(e)],issues:[]}}let s=this.getBusTypes(),o=n?.flatMap(a=>{let c=t.getCompatibleKeys(a.name,e.parent).some(l=>this.typeCache.get(r)?.has(l));if(!c){let l=s.filter(u=>this.typeCache.get(r)?.has(`${a.name}::${u}`));if(l.length)return x(37,a.ast.firstToken,a.ast.lastToken,a.ast,{templateStrings:l})}return c?[]:[x(32,a.ast.firstToken,a.ast.lastToken,a.ast,{severity:pn.DiagnosticSeverity.Hint,tags:[pn.DiagnosticTag.Unnecessary],templateStrings:[a.name]})]})??[];return{type:i.length?i:[To(e)],issues:o}}processVendorPrefix(e){let r=Js.default.join(e,"vendor-prefixes.txt");if(!(0,Ju.existsSync)(r))return;let n=(0,Ju.readFileSync)(r,"utf-8"),i=/^(?!#)(\S+)\s+(.+)$/gm;Array.from(n.matchAll(i),s=>[s[1].trim(),s[2].trim()]).forEach(([s,o])=>{this.vendorPrefixMap.set(s,o)})}loadTypeAndCache(e,r){e=Array.isArray(e)?e:[e];let n=e.filter(a=>this.processedFolders.has(a)).flatMap(a=>Array.from(this.zephyrBindingCache.entries()).flatMap(([c,l])=>c.startsWith(a)?[l]:[]));n.push(...e.filter(a=>!this.processedFolders.has(a)).flatMap(a=>(this.processVendorPrefix(a),this.processedFolders.add(a),Po.sync("**/*.yaml",{cwd:a,ignore:"test/*"}).map(l=>{if(l=(0,Js.resolve)(a,l),this.zephyrBindingCache.has(l))return this.zephyrBindingCache.get(l);try{let u=IB.default.parse((0,Ju.readFileSync)(l,"utf-8")),d=xB(u?.include),f={...u,bus:u.bus?Array.isArray(u.bus)?u.bus:[u.bus]:void 0,include:d,rawInclude:[...d],filePath:l};return this.zephyrBindingCache.set(l,f),f}catch(u){console.warn(u)}}).filter(l=>!!l))));let i=n.map(a=>bg(n,a)).filter(a=>!!a&&!a.include.length),s=this.typeCache.get(r);s||(s=new Map,this.typeCache.set(r,s));let o=this.contextBindings.get(r);if(o||(o=new Map,this.contextBindings.set(r,o)),i.forEach(a=>{o.set(a.compatible??"",a)}),NQ(i,s,this.vendorPrefixMap),!s.has("simple-bus")){let a=this.getBaseZephyrType(r);if(a){let c=RQ(a);s.set("simple-bus",()=>c)}}}getBindings(e){return Array.from(this.typeCache.get(e)?.keys()??[]).map(r=>r.split("::",1)[0])}getBindingVendorString(e){let r=e.split(",",1)[0];return this.vendorPrefixMap.get(r)}getBindingDocumentation(e,r){let n=this.contextBindings.get(e)?.get(r);if(!n)return;let i=this.getBindingVendorString(n.compatible??"");return{kind:pn.MarkupKind.Markdown,value:[...i?["### Vendor",...i?[i]:[]]:[],...n.title?["### Title",Xi(n.title)]:[],...n.description?["### Description",Xi(n.description)]:[],...n.examples?["### Examples",...n.examples.map(Xi)]:[]].join(`
345
+ `)}}},PB,vg=()=>(PB??=new $P,PB);var Js=q(require("path")),Ju=require("fs"),AB=q(require("path")),IB=q(wS());var pn=q(U());var NB=()=>{let t=new W("nonposted-mmio",V("EMPTY"),"optional");return t.description=["Specifies that direct children of this bus should use non-posted memory accesses (i.e. a non-posted mapping mode) for MMIO ranges."],t};function RB(){let t=tn();t.noMismatchPropertiesAllowed=!0,t.compatible="simple-bus";let e=t.properties.find(n=>n.name==="compatible");e.required=()=>"required";let r=t.properties.find(n=>n.name==="ranges");return r.required=()=>"required",t.addProperty(NB()),t}var EB=(t,e)=>{switch(t){case"string":return typeof e=="string"?e:void 0;case"int":return typeof e=="number"?e:void 0;case"boolean":return;case"array":return Array.isArray(e)&&e.every(r=>typeof r=="number")?e:void 0;case"uint8-array":return Array.isArray(e)&&e.every(r=>typeof r=="number")?e:void 0;case"string-array":return Array.isArray(e)&&e.every(r=>typeof r=="string")?e:void 0;case"phandle":return;case"phandles":return;case"phandle-array":return;case"path":return;case"compound":return}},bg=(t,e)=>{if(Object.entries(e.properties??{}).forEach(([r,n])=>{if(!n){delete e.properties?.[r],console.warn(`Property ${r} is undefined in binding ${e.filePath}`);return}n.name=r}),e.extends??=[],e=e.include.reduce((r,n)=>{let i=t.find(s=>(0,Js.basename)(s.filePath)===n.name);if(i){let s=n["property-blocklist"],o=n["property-allowlist"];e.extends?.push(...r.include.map(c=>(0,Js.basename)(c.name,".yaml")));let a=n["child-binding"];return r.include=r.include.filter(c=>c!==n),OB(t,i,r,s,o,a)??r}return console.warn(`Unable to find ${n.name}`),r},e),e["child-binding"]){let r=xB(e["child-binding"].include);e["child-binding"].include=r,e["child-binding"].rawInclude=[...r],e["child-binding"]=bg(t,e["child-binding"]),e["child-binding"]&&(e["child-binding"].isChildBinding=!0,e["child-binding"].filePath=e.filePath)}if(!e.include.length)return e},wB=t=>Array.isArray(t)?t:t?[t]:[],OB=(t,e,r,n=[],i,s)=>{let o=bg(t,e),a=bg(t,r);if(!o||!a)return;let c=new Set;Object.keys(o?.properties??{}).forEach(p=>c.add(p)),Object.keys(a?.properties??{}).forEach(p=>c.add(p));let l={};Array.from(c).forEach(p=>{let m=n?.some(y=>y===p)||i&&!i.some(y=>y===p)?void 0:o.properties?.[p]??void 0,h=a.properties?.[p]??void 0;(m||h)&&(l={...l,[p]:{...m??{},...h}})}),a.properties=l,a.extends??=[],a.extends.push(...o.extends??[]),a["on-bus"]??=o["on-bus"];let u=new Set;return Object.keys(o).filter(p=>p.endsWith("-cells")).forEach(p=>u.add(p)),Object.keys(o).filter(p=>p.endsWith("-cells")).forEach(p=>u.add(p)),Array.from(u).forEach(p=>{let m=o[p]??[],h=a[p]??[];a[p]=Array.from([...m,...h])}),(o.class||a.class)&&(a.class=[...new Set([...wB(a.class),...wB(o.class)])]),a.bus?a.bus.push(...o.bus??[]):a.bus=o.bus,o["child-binding"]&&(a["child-binding"]??={filePath:a.filePath,include:[],rawInclude:[],isChildBinding:!0},OB(t,o["child-binding"],a["child-binding"]??{filePath:a.filePath,include:[],rawInclude:[],isChildBinding:!0},s?.["property-blocklist"],s?.["property-allowlist"],s?.["child-binding"])),a},xB=t=>t?typeof t=="string"?[{name:t}]:t.map(e=>typeof e!="string"?e:{name:e}):[],FP=class t{constructor(){this.typeCache=new Map;this.contextBindings=new Map;this.processedFolders=new Set;this.zephyrBindingCache=new Map;this.vendorPrefixMap=new Map}static getCompatibleKeys(e,r){return!r||!r.nodeType?.bus?.length?[e]:[...r.nodeType.bus.map(n=>`${e}::${n}`),e]}getBaseZephyrType(e){let r=e.split(":");return Array.from(this.zephyrBindingCache.keys()).filter(i=>r.some(s=>i.startsWith(s))).flatMap(i=>this.zephyrBindingCache.get(i)).find(i=>i.filePath.endsWith(`${Js.default.sep}base.yaml`))}getBaseNodeType(e,r){let n=this.getBaseZephyrType(r),i=n?Sg(n,e):void 0;if(i){i.warnMismatchProperties=!1;let s=i.properties.find(o=>o.name==="compatible");s&&(s.required=()=>"optional")}return i}static getNodeCompatible(e){let i=e.getProperty("compatible")?.ast.values?.values.filter(s=>s&&s.value instanceof ne);if(i?.length)return i.map(s=>s?.value?{name:s.value.value,ast:s.value}:void 0)}getNodeTypes(e,r){let n=t.getNodeCompatible(e)?.filter(a=>!!a),i=n?.flatMap(a=>t.getCompatibleKeys(a.name,e.parent).map(c=>this.typeCache.get(r)?.get(c)?.(e)).filter(c=>!!c))??[];if(!i.length){let a;if(e.pathString==="/zephyr,user"){let c={},l={properties:c,filePath:"",include:[],rawInclude:[],isChildBinding:!1},u=(d,f)=>{c[d]={name:d,type:f}};e.properties.forEach(d=>{if(d.name.endsWith("-gpios")){u(d.name,"phandle-array");return}let f=d.ast.values?.values.map(m=>m?.value),p=f?.filter(m=>!!m);if(f===void 0||p===void 0)u(d.name,"boolean");else if(p.every(m=>m instanceof ne))u(d.name,f.length>1?"string-array":"string");else if(p.every(m=>m instanceof Lr))u(d.name,"uint8-array");else if(p.every(m=>m instanceof ut)){let m=p.flatMap(h=>h.values);m.every(h=>h.value instanceof ge)?u(d.name,m.length>1?"array":"int"):m.every(h=>h.value instanceof ie||h.value instanceof it)?u(d.name,m.length>1?"phandles":"phandle"):u(d.name,"phandle-array")}else u(d.name,"compound")}),a=Sg(l,e)}if(a){a.warnMismatchProperties=!1;let c=a.properties.find(l=>l.name==="compatible");c&&(c.required=()=>"optional")}return{type:[a??To(e)],issues:[]}}let s=this.getBusTypes(),o=n?.flatMap(a=>{let c=t.getCompatibleKeys(a.name,e.parent).some(l=>this.typeCache.get(r)?.has(l));if(!c){let l=s.filter(u=>this.typeCache.get(r)?.has(`${a.name}::${u}`));if(l.length)return x(37,a.ast.firstToken,a.ast.lastToken,a.ast,{templateStrings:l})}return c?[]:[x(32,a.ast.firstToken,a.ast.lastToken,a.ast,{severity:pn.DiagnosticSeverity.Hint,tags:[pn.DiagnosticTag.Unnecessary],templateStrings:[a.name]})]})??[];return{type:i.length?i:[To(e)],issues:o}}processVendorPrefix(e){let r=Js.default.join(e,"vendor-prefixes.txt");if(!(0,Ju.existsSync)(r))return;let n=(0,Ju.readFileSync)(r,"utf-8"),i=/^(?!#)(\S+)\s+(.+)$/gm;Array.from(n.matchAll(i),s=>[s[1].trim(),s[2].trim()]).forEach(([s,o])=>{this.vendorPrefixMap.set(s,o)})}loadTypeAndCache(e,r){e=Array.isArray(e)?e:[e];let n=e.filter(a=>this.processedFolders.has(a)).flatMap(a=>Array.from(this.zephyrBindingCache.entries()).flatMap(([c,l])=>c.startsWith(a)?[l]:[]));n.push(...e.filter(a=>!this.processedFolders.has(a)).flatMap(a=>(this.processVendorPrefix(a),this.processedFolders.add(a),Po.sync("**/*.yaml",{cwd:a,ignore:"test/*"}).map(l=>{if(l=(0,Js.resolve)(a,l),this.zephyrBindingCache.has(l))return this.zephyrBindingCache.get(l);try{let u=IB.default.parse((0,Ju.readFileSync)(l,"utf-8")),d=xB(u?.include),f={...u,bus:u.bus?Array.isArray(u.bus)?u.bus:[u.bus]:void 0,include:d,rawInclude:[...d],filePath:l};return this.zephyrBindingCache.set(l,f),f}catch(u){console.warn(`Failed to load binding file ${l}, with error: ${u instanceof Error?u.message:u}`)}}).filter(l=>!!l))));let i=n.map(a=>bg(n,a)).filter(a=>!!a&&!a.include.length),s=this.typeCache.get(r);s||(s=new Map,this.typeCache.set(r,s));let o=this.contextBindings.get(r);if(o||(o=new Map,this.contextBindings.set(r,o)),i.forEach(a=>{o.set(a.compatible??"",a)}),NQ(i,s,this.vendorPrefixMap),!s.has("simple-bus")){let a=this.getBaseZephyrType(r);if(a){let c=RQ(a);s.set("simple-bus",()=>c)}}}getBindings(e){return Array.from(this.typeCache.get(e)?.keys()??[]).map(r=>r.split("::",1)[0])}getBindingVendorString(e){let r=e.split(",",1)[0];return this.vendorPrefixMap.get(r)}getBindingDocumentation(e,r){let n=this.contextBindings.get(e)?.get(r);if(!n)return;let i=this.getBindingVendorString(n.compatible??"");return{kind:pn.MarkupKind.Markdown,value:[...i?["### Vendor",...i?[i]:[]]:[],...n.title?["### Title",Xi(n.title)]:[],...n.description?["### Description",Xi(n.description)]:[],...n.examples?["### Examples",...n.examples.map(Xi)]:[]].join(`
346
346
  `)}}getZephyrContextBinding(e){return Array.from(this.contextBindings.get(e)?.values()??[])}getBusTypes(){let e=Array.from(this.zephyrBindingCache.values()).flatMap(r=>r.bus?.filter(n=>!!n)??[]).filter(r=>!!r);return Array.from(new Set(e))}getDocumentLinks(e,r){let n=this.zephyrBindingCache.get(Ne(e.uri));if(!n)return[];let i=e.getText();return MB(n).map(a=>{let l=new RegExp(a.name).exec(i);if(l){let u=e.positionAt(l.index),d=e.positionAt(l.index+l[0].length),f=Array.from(this.zephyrBindingCache.keys()).find(p=>p.endsWith(`${AB.default.sep}${a.name}`)&&r.some(m=>p.startsWith(m)));return f?{range:pn.Range.create(u,d),target:ue(f)}:void 0}}).filter(a=>!!a)}resetCache(e){this.typeCache.delete(e)}};function MB(t){return[...t.rawInclude,...t["child-binding"]?MB(t["child-binding"]):[]].flat()}var DB,Bi=()=>(DB??=new FP,DB),NQ=(t,e,r)=>t.forEach(n=>{n.compatible&&e.set(n["on-bus"]?`${n.compatible}::${n["on-bus"]}`:n.compatible,i=>Sg(n,i,r))}),Sg=(t,e,r)=>{let n=To(e);n.compatible=t.compatible,n.title=t.title,n.description=t.description,n.examples=t.examples,n.bindingsPath=t.filePath,n.zephyrBinding=t,n.bus=typeof t.bus=="string"?[t.bus]:Array.from(new Set(t.bus)),n.onBus=t["on-bus"],n.class=typeof t.class=="string"?[t.class]:Array.isArray(t.class)?t.class:void 0,t.extends?.forEach(o=>n.extends.add(o)),n.warnMismatchProperties=!0,r&&t.compatible?.includes(",")&&(n.vendor=r?.get(t.compatible.split(",",1)[0]));let s=Object.keys(t).filter(o=>o.endsWith("-cells")).map(o=>({specifier:o.replace(/-cells$/,""),values:t[o]}));if(n.cellsValues=s,Object.entries(t.properties??{}).forEach(([o,a])=>{LB(n,o,a)}),t["child-binding"]){let o=t["child-binding"];n.childNodeType=a=>{let c=Sg(o,a);return c.hasParentBinding=!0,c}}return n},RQ=t=>{let e=RB();e.bus=typeof t.bus=="string"?[t.bus]:Array.from(new Set(t.bus)),e.onBus=t["on-bus"],t.extends?.forEach(i=>e.extends.add(i)),e.warnMismatchProperties=!0;let n=Object.keys(t).filter(i=>i.endsWith("-cells")).map(i=>({specifier:i.replace(/-cells$/,""),values:t[i]}));return e.cellsValues=n,Object.entries(t.properties??{}).forEach(([i,s])=>{LB(e,i,s)}),e},LB=(t,e,r)=>{let n=t.properties.find(i=>i.getNameMatch(e));if(n&&typeof n.name=="string"){n.name!=="reg"?n.required=()=>r.required?"required":"optional":r.required&&(n.required=()=>"required"),n.values=()=>r.enum??[],n.constValue=EB(r.type,r.const),n.bindingType=r.type;let i=n.additionalTypeCheck;n.additionalTypeCheck=(s,o)=>[...CB(r,e,n)(s,o),...i?.(s,o)??[]]}else{let i=r.type==="compound"?n?.type:Zc(r.type);i??=Zc(r.type);let s=new W(e,i,r.required?"required":"optional",void 0,r.enum);s.additionalTypeCheck=(o,a)=>{let c=[...n?.additionalTypeCheck?.(o,a)??[],...CB(r,e,s)(o,a)];return s.signatureArgs??=n?.signatureArgs,s.signatureArgsCyclic??=!!n?.signatureArgsCyclic,c},s.description=r.description?[r.description]:n?.description,s.bindingType=r.type,s.constValue=EB(r.type,r.const),t.addProperty(s)}},CB=(t,e,r)=>{let n=t;return(i,s)=>{let o=i.parent.root,a=[];if(n.const){let d=i.ast.getFlatAstValues();if(d?.length==1&&d.every(f=>f instanceof ge)){let f=d.map(h=>h.evaluate(s)),p=Array.isArray(n.const)?n.const:[n.const];if(!(p.length===f.length&&f.every((h,y)=>typeof h=="number"&&Number.isNaN(h)||p[y]===h))){let h=i.ast.values??i.ast;a.push(x(24,h.firstToken,h.lastToken,h,{templateStrings:[`Binding expects property "${i.name}" be of type "${n.type}" with value: ${n.const}`]}))}}}n.deprecated&&a.push(x(14,i.ast.firstToken,i.ast.lastToken,i.ast,{severity:pn.DiagnosticSeverity.Warning,tags:[pn.DiagnosticTag.Deprecated],templateStrings:[i.name]})),(n.type==="int"||n.type==="array"&&(n.min!==void 0||n.max!==void 0))&&i.ast.getFlatAstValues()?.forEach(f=>{if(!(f instanceof ge))return;let p=f.evaluate(s);typeof p=="number"&&(n.min!==void 0&&p<n.min&&a.push(x(41,f.firstToken,f.lastToken,f,{templateStrings:[n.min.toString()]})),n.max!==void 0&&p>n.max&&a.push(x(42,f.firstToken,f.lastToken,f,{templateStrings:[n.max.toString()]})))});let c=n["min-len"],l=n["max-len"];if((c!==void 0||l!==void 0)&&(n.type==="array"||n.type==="string-array"||n.type==="uint8-array"||n.type==="phandles")){let d=i.ast.getFlatAstValues();d&&c!==void 0&&d.length<c&&a.push(x(43,i.ast.propertyName.firstToken,i.ast.propertyName.lastToken,i.ast,{templateStrings:[i.name,c.toString()]})),d&&l!==void 0&&d.length>l&&d.slice(l).forEach(f=>{f&&a.push(x(44,f.firstToken,f.lastToken,i.ast,{templateStrings:[i.name,l.toString()]}))})}if((n.type==="phandle"||n.type==="phandles"||n.type==="path")&&He(i.ast.values)?.forEach(f=>{An(f,o)||a.push(x(22,f.firstToken,f.lastToken,f))}),n.type==="path"&&i.ast.values?.values.at(0)?.value instanceof ne){let d=i.ast.values?.values.at(0)?.value,f=[];d.value.split("/").every(p=>{let m=o.getNode(p);return m?f.push(p):a.push(x(23,d.firstToken,d.lastToken,d,{templateStrings:[p,`/${f.join("/")}`]})),!m})}let u=i.name.match(/^(.*)-(\d+)$/);if(n.type==="phandles"&&u){let d="";e.endsWith("-gpios")?d="gpio":d=n["specifier-space"]??u[1];let f=Number.parseInt(u[2],10),p=i.parent.getProperty(`${d}-names`);p&&(p.ast.quickValues?.at(f)||a.push(x(33,i.ast.firstToken,i.ast.lastToken,i.ast,{severity:pn.DiagnosticSeverity.Warning,linkedTo:[p.ast],templateStrings:[i.name,f.toString()]})))}if(n.type==="phandle-array"){let d=He(i.ast.values),f=0,p=[],m=0;for(;d&&f<d.length;){let h=d.at(f),y=An(h,o),S=h;if(!y){let pe=h??i.ast;a.push(x(22,pe.firstToken,pe.lastToken,pe));break}let v="";e.endsWith("-gpios")?v="gpio":v=n["specifier-space"]??e.slice(0,-1);let b=y.getProperty(`#${v}-cells`);if(!b){a.push(x(16,i.ast.firstToken,i.ast.lastToken,i.ast,{linkedTo:[...y.nodeNameOrLabelRef],templateStrings:[i.name,`#${v}-cells`,`/${y.path.slice(1).join("/")}`]}));break}let P=b?Ge(b,0,0,s)??0:0,N=y.nodeType?.cellsValues?.find(pe=>pe.specifier===v)?.values;if(p.push([`${m}_phandle`,...N?.map(pe=>`${m}_${pe}`)??[],...Array.from({length:P-(N?.length??0)},(pe,Pe)=>`${m}_cell${P-(N?.length??0)?Pe:""}`)]),1+P>d.length-f){let pe=h??i.ast;a.push(x(19,pe.firstToken,pe.lastToken,pe,{templateStrings:[i.name,`<${p.at(-1).join(" ")}>`]}));break}f+=1+P;let $=d.slice(f-P,f),j={mappingValuesAst:$,specifierSpace:v,cellCount:P,target:y};i.nexusMapsTo.push(j);let L=y.getProperty(`${v}-map`);if(L){let pe=y.getNexusMapEntryMatch(v,s,$);pe?.match?j.mapItem=pe.match:a.push(x(31,pe.entry.firstToken,pe.entry.lastToken,pe.entry,{linkedTo:[L.ast]}))}$.every(pe=>pe instanceof ge)&&y.spesifierNexusMapping.push({expressions:$,node:i.parent,property:i,specifierSpace:v});let ye=i.parent.getProperty(`${v}-names`);h&&ye&&(ye.ast.quickValues?.at(m)||a.push(x(33,h.firstToken,d[f-1]?.lastToken,i.ast,{severity:pn.DiagnosticSeverity.Warning,linkedTo:[ye.ast],templateStrings:[i.name,m.toString()]})));let qe=n["max-len"];S&&qe&&m>=qe&&a.push(x(44,S.firstToken,(j.mappingValuesAst.at(-1)??S).lastToken,i.ast,{templateStrings:[i.name,qe.toString()]})),m++}(n["min-len"]!==void 0||n["max-len"]!==void 0)&&n["min-len"]!==void 0&&i.nexusMapsTo.length<n["min-len"]&&a.push(x(43,i.ast.propertyName.firstToken,i.ast.propertyName.lastToken,i.ast,{templateStrings:[i.name,n["min-len"].toString()]})),p.push([`${m}_phandle`,`${m}_cell...`]),r.signatureArgs=p.map(h=>h.map(y=>pn.ParameterInformation.create(y)))}return a}};var Qu=new Map,qB=(t,e)=>{let r=t.zephyrBindings.join(":");return e==="Zephyr"&&(Qu.set(r,(Qu.get(r)??0)+1),Bi().loadTypeAndCache(t.zephyrBindings,r)),{files:t,type:e,getNodeTypes:n=>{switch(e){case"Zephyr":return Bi().getNodeTypes(n,r);case"DevicetreeOrg":return{type:vg().getNodeTypes(t.deviceOrgBindingsMetaSchema,t.deviceOrgTreeBindings,n),issues:[]}}},getBindings:()=>{switch(e){case"Zephyr":return Bi().getBindings(r);case"DevicetreeOrg":return vg().getBindings()}},getBindingVendorString:n=>{if(e==="Zephyr")return Bi().getBindingVendorString(n)},getBindingDocumentation:n=>{switch(e){case"Zephyr":return Bi().getBindingDocumentation(r,n);case"DevicetreeOrg":return vg().getBindingDocumentation(t.deviceOrgBindingsMetaSchema,t.deviceOrgTreeBindings,n)}},getZephyrContextBinding:()=>{if(e==="Zephyr")return Bi().getZephyrContextBinding(r)},getBusTypes:()=>{switch(e){case"Zephyr":return Bi().getBusTypes();case"DevicetreeOrg":return[]}},getDocumentLinks(n){if(!n)return[];switch(e){case"Zephyr":return Bi().getDocumentLinks(n,t.zephyrBindings);case"DevicetreeOrg":return[]}},dispose:()=>{if(e==="Zephyr"){let n=Qu.get(r)??0;n<=1?(Qu.delete(r),Bi().resetCache(r)):Qu.set(r,n-1)}}}};var _g=q(U());var EQ=t=>!t.lastToken.prevToken||!t.lastToken.prevToken.prevToken?[]:[{startLine:t.firstToken.pos.line,startCharacter:t.firstToken.pos.col,endLine:t.lastToken.prevToken.prevToken.pos.line,endCharacter:t.lastToken.prevToken.prevToken.pos.col,kind:_g.FoldingRangeKind.Comment}],BP=t=>!t.openScope||!t.closeScope?.prevToken?t.nodes.flatMap(BP):[{startLine:t.openScope.pos.line,startCharacter:t.openScope.pos.col,endLine:t.closeScope.prevToken.pos.line,endCharacter:t.closeScope.prevToken.pos.col,kind:_g.FoldingRangeKind.Region},...t.nodes.flatMap(BP)],wQ=t=>{let e=[];return[...t.ifBlocks.map(r=>({start:(r.expression??r.keyword).lastToken,end:r.content?.lastToken??(r.expression??r.keyword).lastToken})),t.elseOption?{start:t.elseOption.keyword.lastToken,end:t.elseOption.content?.lastToken}:null].forEach(r=>{!r||!r.end||e.push({startLine:r.start.pos.line,startCharacter:r.start.pos.col,endLine:r.end.pos.line,endCharacter:r.end.pos.colEnd,kind:_g.FoldingRangeKind.Region})}),e},DQ=t=>t instanceof we?BP(t):t instanceof On?wQ(t):t instanceof Tn?EQ(t):[];function $B(t,e){return e.allAstItems.flatMap(r=>[r,...r.allDescendants]).filter(r=>fe(r.fsPath,t)).flatMap(DQ)}var BB=require("fs"),jB=require("path"),Mr=q(U());function CQ(t){if(!t||!(t.ast instanceof je)&&!(t.ast instanceof mr)&&!(t.ast instanceof ie))return[];let e=r=>r.nodeType?.bindingsPath?[Mr.Location.create(ue(r.nodeType.bindingsPath),Mr.Range.create(Mr.Position.create(0,0),Mr.Position.create(0,0)))]:[];return t.item instanceof J&&!Zt(t.ast)?e(t.item):t.ast instanceof mr&&t.ast.parentNode instanceof ie&&t.ast.parentNode.linksTo?e(t.ast.parentNode.linksTo):t.ast instanceof je&&t.ast.linksTo?e(t.ast.linksTo):[]}function AQ(t){if(!t||!t.item||!(t.ast instanceof Qe)||t.runtime.context.bindingLoader?.type!=="Zephyr")return[];let e=t.item instanceof et?t.item.parent:t.item,r=e.nodeType instanceof _t?e.nodeType.zephyrBinding:void 0;if(!r)return[];let n=FB(t.ast.name,r);if(n)return[Mr.Location.create(ue(r.filePath),n)];let i=(t.runtime.context.bindingLoader?.getZephyrContextBinding?.()??[]).filter(s=>r.extends?.some(o=>(0,jB.basename)(s.filePath)===`${o}.yaml`));for(let s of i){let o=FB(t.ast.name,s);if(o)return[Mr.Location.create(ue(s.filePath),o)]}return[Mr.Location.create(ue(r.filePath),Mr.Range.create(Mr.Position.create(0,0),Mr.Position.create(0,0)))]}async function UB(t,e){return Et(t,e,r=>[...CQ(r),...AQ(r)])}function FB(t,e){let r=e.filePath,n=(0,BB.readFileSync)(r,"utf8");return IQ(n,new RegExp(`(${t}|"${t}")\\s*:`))}function IQ(t,e){let r=t.match(e);if(!r)return;let n=r.index;if(n===void 0)return;let i=t.slice(0,n),s=i.split(`
347
347
  `).length-1,o=i.lastIndexOf(`
348
348
  `),a=o===-1?n+1:n-o,c=a+r[0].length;return Mr.Range.create(Mr.Position.create(s,a),Mr.Position.create(s,c))}var Sc=require("fs");var OQ=(t,e)=>{let r=(0,Sc.readFileSync)(t).toString();if($r().needsRenew(t,r))$r().renewLexer(t,r),e(t);else return console.log("file changed event has the same text, skipping.",t)},Pg=class{constructor(e,r,n){this.file=e;this.cb=r;this.isFileDirty=n}#e=0;watch(){if(this.count++,this.count===1){console.log("create watch for",this.file);let e=this.file,r=this.cb;this.onChange=()=>{if(console.log("onChange - file watcher",e),this.isFileDirty()){console.log("onChange - file is dirty, skipping");return}OQ(e,r)},(0,Sc.watchFile)(e,this.onChange)}}unwatch(){this.count===1&&(console.log("dispose watch for",this.file),(0,Sc.unwatchFile)(this.file,this.onChange),this.onChange=void 0),this.count--}get count(){return this.#e}set count(e){this.#e=e,e<0&&(this.#e=0,console.warn("unwatching an un watched file",this.file))}};var Vt=q(require("path")),jP=require("fs");var Ti=t=>{if(t)return Array.isArray(t)?t:[t]},xQ=t=>({...t,deviceOrgBindingsMetaSchema:Ti(t.deviceOrgBindingsMetaSchema),deviceOrgTreeBindings:Ti(t.deviceOrgTreeBindings),includePaths:Ti(t.includePaths),lockRenameEdits:Ti(t.lockRenameEdits),zephyrBindings:Ti(t.zephyrBindings),overlays:Ti(t.overlays)}),HB=t=>({...t,defaultDeviceOrgBindingsMetaSchema:Ti(t.defaultDeviceOrgBindingsMetaSchema),defaultDeviceOrgTreeBindings:Ti(t.defaultDeviceOrgTreeBindings),defaultIncludePaths:Ti(t.defaultIncludePaths),defaultLockRenameEdits:Ti(t.defaultLockRenameEdits),defaultZephyrBindings:Ti(t.defaultZephyrBindings),contexts:t.contexts?.map(xQ)}),zn=async(t,e=[],r)=>{let n=r?e.map(s=>Ne(s.uri)).sort((s,o)=>s.split(Vt.sep).length-o.split(Vt.sep).length).find(s=>Kw(s,r)):void 0;return[...e.at(0)?[{replace:"${workspaceFolder}",fsPath:n??Ne(e[0].uri)}]:[],...e.map(s=>({replace:`\${workspaceFolder:${s.name}}`,fsPath:Ne(s.uri)}))].forEach(s=>t=t.replaceAll(s.replace,s.fsPath)),t},Qs={defaultBindingType:"Zephyr",defaultZephyrBindings:[],defaultIncludePaths:[],defaultDeviceOrgBindingsMetaSchema:[],defaultDeviceOrgTreeBindings:[],contexts:[],defaultLockRenameEdits:[],allowAdhocContexts:!0,autoChangeContext:!0,defaultShowFormattingErrorAsDiagnostics:!0,disableFileWatchers:!1,autoAddMissingPropertiesOnCompletion:!0},UP=async(t,e,r)=>{let n=await zn(t.cwd??"${workspaceFolder}",r,t.dtsFile)??e.cwd,i=await Promise.all((t.includePaths??e.defaultIncludePaths).map(p=>zn(p,r,t.dtsFile))),s=await Promise.all((t.zephyrBindings??e.defaultZephyrBindings).map(p=>zn(p,r,t.dtsFile))),o=t.bindingType??e.defaultBindingType,a=await Promise.all((t.deviceOrgTreeBindings??e.defaultDeviceOrgTreeBindings).map(p=>zn(p,r,t.dtsFile))),c=await Promise.all((t.deviceOrgBindingsMetaSchema??e.defaultDeviceOrgBindingsMetaSchema).map(p=>zn(p,r,t.dtsFile))),l=await Promise.all((t.lockRenameEdits??e.defaultLockRenameEdits).map(p=>zn(p,r,t.dtsFile)));if(n&&o==="Zephyr"&&(!s||s.length===0)&&(s=["./zephyr/dts/bindings"]),!t.dtsFile){console.log("Context is missing dtsFile, skipping...");return}let u=t.dtsFile,d=t.overlays??[],f=t.compileCommands;return n&&(s=s.map(p=>(0,Vt.resolve)(n,p)).filter(p=>(0,jP.existsSync)(p)),a=a?.map(p=>(0,Vt.resolve)(n,p)),c=c.map(p=>(0,Vt.resolve)(n,p)),i=i.map(p=>(0,Vt.resolve)(n,p)),u=(0,Vt.resolve)(n,u),d=d.map(p=>(0,Vt.resolve)(n,p)),l=l.map(p=>(0,Vt.resolve)(n,p)),f=f?(0,Vt.resolve)(n,f):void 0),{ctxName:t.ctxName??(0,Vt.basename)(u),cwd:n?ft(n):void 0,includePaths:i.map(ft),zephyrBindings:s.map(ft),bindingType:o,deviceOrgTreeBindings:a.map(ft),deviceOrgBindingsMetaSchema:c.map(ft),dtsFile:ft(u),overlays:d.map(ft),lockRenameEdits:l.map(ft),compileCommands:f?ft(f):void 0,showFormattingErrorAsDiagnostics:t.showFormattingErrorAsDiagnostics??e.defaultShowFormattingErrorAsDiagnostics,disableFileWatchers:t.disableFileWatchers??e.disableFileWatchers,autoAddMissingPropertiesOnCompletion:t.autoAddMissingPropertiesOnCompletion??e.autoAddMissingPropertiesOnCompletion}},Zu=async(t,e)=>{let r=t.cwd?await zn(t.cwd,e):void 0,n=t.defaultBindingType,i=t.defaultDeviceOrgBindingsMetaSchema=await Promise.all((t.defaultDeviceOrgBindingsMetaSchema??[]).map(d=>zn(d,e))),s=t.defaultDeviceOrgTreeBindings=await Promise.all((t.defaultDeviceOrgTreeBindings??[]).map(d=>zn(d,e))),o=t.defaultIncludePaths=await Promise.all((t.defaultIncludePaths??[]).map(d=>zn(d,e))),a=t.defaultZephyrBindings=await Promise.all((t.defaultZephyrBindings??[]).map(d=>zn(d,e))),c=t.defaultLockRenameEdits=await Promise.all((t.defaultLockRenameEdits??[]).map(d=>zn(d,e)));r&&(o=t.defaultIncludePaths=(t.defaultIncludePaths??[]).map(d=>(0,Vt.resolve)(r,d)),n==="Zephyr"&&!t.defaultZephyrBindings&&(a=["./zephyr/dts/bindings"]),a=a.map(d=>(0,Vt.resolve)(r,d)),i=i.map(d=>(0,Vt.resolve)(r,d)),s=(t.defaultDeviceOrgTreeBindings??[]).map(d=>(0,Vt.resolve)(r,d)),c=c.map(d=>(0,Vt.resolve)(r,d)));let l={cwd:r,defaultDeviceOrgBindingsMetaSchema:i,defaultDeviceOrgTreeBindings:s,defaultIncludePaths:o,defaultZephyrBindings:a,defaultLockRenameEdits:c,defaultBindingType:n,autoChangeContext:t.autoChangeContext??Qs.autoChangeContext,allowAdhocContexts:t.allowAdhocContexts??Qs.allowAdhocContexts,defaultShowFormattingErrorAsDiagnostics:t.defaultShowFormattingErrorAsDiagnostics??Qs.defaultShowFormattingErrorAsDiagnostics,disableFileWatchers:t.disableFileWatchers??!1,autoAddMissingPropertiesOnCompletion:t.autoAddMissingPropertiesOnCompletion??!0},u=(await Promise.all(t.contexts?.map(d=>UP(d,l,e))??[])).filter(d=>!!d).filter(d=>[d.dtsFile,...d.overlays].every(f=>(0,jP.existsSync)(f)&&Vt.default.isAbsolute(f)));return{...l,contexts:u}};var VB=t=>`DT_PROP(${HP(t.parent)}, ${t.name.replaceAll("-","_")}))`,WB=t=>t.parent.labels.map(e=>`DT_PROP(DT_NODELABEL(${e.label.toString()}), ${t.name.replaceAll("-","_")})`);var HP=t=>`DT_PATH(${t.path.slice(1).map(e=>e.replace("@","_").replaceAll("-","_")).join(",")})`,zB=t=>t.labels.map(e=>`DT_NODELABEL(${e.label.toString()})`),GB=t=>{let e=[];return Ei.getNodeFromPath(["aliases"],t.root)?.properties.filter(i=>{if(i.ast.quickValues?.at(0)===t.pathString)return!0;let s=i.ast.values?.values.at(0)?.value;if(s instanceof ie&&s.linksTo===t||s instanceof it&&s.path?.pathParts.at(-1)?.linksTo===t)return!0})?.forEach(i=>e.push(`DT_ALIAS(${i.name.replaceAll("-","_")})`)),e};function MQ(t,e){if(!t||!(t.item instanceof et)||!(t.ast instanceof Qe))return[];let r=[];return e.settings.bindingType==="Zephyr"&&(r.push({type:"dt_zephyr_macro_prop_node_path",data:VB(t.item)}),WB(t.item).forEach(n=>{r.push({type:"dt_zephyr_macro_prop_node_label",data:n})})),r}function LQ(t,e){if(!t||t.item===null)return[];let r;if(t.item instanceof J?r=t.item:t.ast.parentNode instanceof ie&&t.ast.parentNode.linksTo?r=t.ast.parentNode.linksTo:t.ast instanceof je&&t.ast.linksTo&&(r=t.ast.linksTo),!r)return[];let n=[{type:"path",data:r.pathString}];return e.settings.bindingType==="Zephyr"&&(zB(r).forEach(i=>{n.push({type:"dt_zephyr_macro_node_label",data:i})}),n.push({type:"dt_zephyr_macro_node_path",data:HP(r)}),GB(r).forEach(i=>{n.push({type:"dt_zephyr_macro_prop_node_alias",data:i})})),n}async function YB(t,e){return e?Et(t,e,r=>[...LQ(r,e),...MQ(r,e)]):[]}var KB=q(U());function qQ(t){return!t||!(t.item instanceof et)?void 0:t.item.parent.nodeType?.getSignatureHelp?.(t.item,t.ast,t.beforeAst,t.afterAst)}async function $Q(t){let e=Jc(t?.ast);if(!e||!e.params.length||!t?.ast||t.ast===e.functionName)return;let n=(await t.runtime.context.getAllStableParsers()).at(-1).cPreprocessorParser.macros.get(e.functionName.name)?.macro.identifier;if(!n||!(n instanceof ii))return;let i=n.params.map(o=>({label:o instanceof vt?o.name:"..."})),s=e.params.find(o=>o&&(t.ast===o||o.isAncestorOf(t.ast)));return s??=t.afterAst?e.params.find(o=>o&&(t.afterAst===o||o.isAncestorOf(t.afterAst))):void 0,s??=t.beforeAst?e.params.find(o=>o&&(t.beforeAst===o||o.isAncestorOf(t.beforeAst))):void 0,{signatures:[KB.SignatureInformation.create(`${e.functionName.name}(${i.map(o=>o.label).join(", ")})`,void 0,...i.flat())],activeSignature:0,activeParameter:s?e.params.indexOf(s):void 0}}async function XB(t,e){if(e)return(await Et(t,e,async r=>[await $Q(r)||qQ(r)])).at(0)}var JB=require("timers"),QB=require("events");var VP=class extends QB.EventEmitter{constructor(e=3e3,r=1e3){super(),this.thresholdBytes=e*1024*1024,this.interval=(0,JB.setInterval)(()=>{let n=process.memoryUsage().heapUsed;n>this.thresholdBytes&&this.emit("thresholdExceeded",{usedMb:(n/1024/1024).toFixed(2),thresholdMb:e})},r)}stop(){clearInterval(this.interval)}},FQ=new VP(3e3),ZB=()=>{FQ.on("thresholdExceeded",({usedMb:t,thresholdMb:e})=>{console.warn(`[HeapMonitor] Heap usage exceeded ${e}MB: ${t}MB used`),l0(),c0()})};var ej=t=>`0x${t.map((e,r)=>e.toString(16).padStart(r?8:0,"0")).join("")}`;function tj(t,e){let r=e.nodePath,n=e.labels.at(0);e.disabled&&(n+=" <DISABLED>");let i=e.nodePath.split("/").pop()??e.nodePath,s=n?`${n} (${i})`:i,o=t.children.filter(a=>{let c=ei(e.start,e.size),l=ei(a.start,a.size),u=qt(e.start,a.start)>=0,d=qt(c,l)<=0,f=qt(e.start,a.start)===0&&qt(e.size,a.size)===0;return u&&d&&!f});if(o.length>0){for(let a of o)tj(a,e);return}t.children.push({name:s,start:e.start,size:e.size,children:[],path:r,disabled:e.disabled})}function BQ(t){let e={};for(let r of t){let n={name:r.name,children:[],path:r.path};for(let i of r.partitions)tj(n,i);e[r.name]=n}return e}function rj(t,e="",r=!0){let n={};for(let d of t.children){let f=`${d.start}-${d.size}`;n[f]||(n[f]=[]),n[f].push(d)}let i="",s=e?r?"\u2514\u2500 ":"\u251C\u2500 ":"",o=[];"start"in t&&t.start.length&&o.push(`start: ${ej(t.start)}`),"size"in t&&t.size.length&&o.push(`size: ${ej(t.size)}`);let a=o.length>0?`[${o.join(", ")}]`:"",c=t.name;i+=`${e}${s}${c} ${a}
349
349
  `;let l=e+(r?" ":"\u2502 "),u=Object.keys(n);return u.forEach((d,f)=>{let p=n[d],m=Array.from(new Set(p.map(v=>v.name))).join(", "),h={};p.forEach(v=>{v.children.forEach(b=>{let P=`${b.start}-${b.size}-${b.name}`;h[P]=b})});let y=Object.values(h),S={name:m,start:p[0].start,size:p[0].size,children:y,path:t.path};i+=rj(S,l,f===u.length-1)}),i}function nj(t){return BQ(t)}function ij(t){return Object.values(t).map(e=>rj(e)).join(`
350
- `)}var xe=[],le,Zs,Ng=new WeakMap,ed=new Map;ZB();var Eg=new Map,oj=t=>{t.settings.disableFileWatchers||t.getContextFiles().forEach(e=>{ed.has(e)||ed.set(e,new Pg(e,ek,()=>{let r=od(e),n=Eg.get(e);return!r||n===void 0?!1:n!==r.version})),ed.get(e)?.watch()})},JP=async t=>{let e=xe.indexOf(t);if(e===-1)return;rd(t,void 0,!0),Ng.delete(t),console.log(`(ID: ${t.id}) cleaning Context for [${t.ctxNames.join(",")}]`);let r=await eo(t);if(X.sendNotification("devicetree/contextDeleted",{ctxNames:t.ctxNames.map(n=>n.toString()),id:t.id,...t.getFileTree(),settings:t.settings,active:le===t,type:r.type}),xe.splice(e,1),await nk(),t===le&&(le=void 0,xe.length)){let n=Zs?Er(xe,{fsPath:Zs}):void 0;n??=xe[0],console.log("Active context was deleted. Forcing active to",n.id),await Sr({id:n.id},!0)}t.settings.disableFileWatchers||t.getContextFiles().map(n=>{ed.get(n)?.unwatch()}),setTimeout(async()=>{await Me();let n=new Set(xe.flatMap(i=>i.getContextFiles()));t.getContextFiles().map(i=>{n.has(i)||$r().reset(i)})},2e3),t.bindingLoader?.dispose()},jQ=t=>{let e=Ng.get(t);if(!e?.abort.signal.aborted)return Promise.all([e?.promise,t.getRuntime()])},Me=async()=>{await Promise.all(xe.map(jQ))},QP=async(t,e)=>(await aj(e)).indexOf(t)!==-1,aj=async t=>{let e=await cj(t);return xe.filter(r=>!e.some(n=>n===r))},cj=async t=>{let e=await XP(t);return xe.filter(r=>e.contexts.find(n=>Ki(n)===r.id))},UQ=async t=>{let e=await YQ(t);return xe.filter(r=>e.contexts.find(n=>Ki(n)===r.id))},HQ=async(t,e)=>(await UQ(e)).indexOf(t)!==-1,VQ=async(t,e)=>{if(t===e)return!0;let r=(await t.getAllStableParsers()).flatMap(i=>i.cPreprocessorParser.dtsIncludes).filter(i=>i.resolvedPath),n=(await e.getAllStableParsers()).flatMap(i=>i.cPreprocessorParser.dtsIncludes).filter(i=>i.resolvedPath);return n.some(i=>fe(i.resolvedPath,t.parser.fsPath))&&r.length?r.every(i=>n.some(s=>s.resolvedPath===i.resolvedPath&&s.firstToken.pos.col===i.firstToken.pos.col&&s.firstToken.pos.len===i.firstToken.pos.len&&s.firstToken.pos.line===i.firstToken.pos.line&&s.lastToken.pos.col===i.lastToken.pos.col&&s.lastToken.pos.len===i.lastToken.pos.len&&s.lastToken.pos.line===i.lastToken.pos.line)):e.getContextFiles().some(i=>fe(i,t.parser.fsPath))},WQ=async t=>{if(!await QP(t))return;let e=await aj(),r=await cj(),n=await Wf(e);if(xe.indexOf(t)===-1)return;let i=await Promise.all(n.flatMap(a=>[...r,...e.filter(c=>c!==a.context)].map(async c=>({context:a.context,same:await VQ(a.context,c)})))),s=t.getContextFiles(),o=n.filter(a=>i.some(c=>c.context===a.context&&c.same)||a.context!==t&&fe(a.context.parser.fsPath,t.parser.fsPath)&&s.some(c=>c&&a.files.indexOf(c)!==-1)).map(a=>a.context);o.length&&await Promise.all(o.map(JP))},X=(0,Re.createConnection)(Re.ProposedFeatures.all),lr=new Re.TextDocuments(Lt),ZP=!1,Rg=!1,lj=!1,uj=!1,dj=!1,WP=!1,zP=!1,GP=!1,YP;X.onInitialize(async t=>{YP=t.workspaceFolders??[],X.console.log(`[Server(${process.pid}) ${YP?.at(0)?.uri} Version 0.14.4 ] Started and initialize received`);let e=t.capabilities;ZP=!!(e.workspace&&e.workspace.configuration),Rg=!!(e.workspace&&e.workspace.workspaceFolders),lj=!!e.workspace?.diagnostics?.refreshSupport,uj=!!e.workspace?.semanticTokens?.refreshSupport,WP=!!e.textDocument?.semanticTokens?.dynamicRegistration,zP=!!e.textDocument?.formatting?.dynamicRegistration,GP=!!e.textDocument?.rangeFormatting?.dynamicRegistration,dj=!!e.workspace?.foldingRange?.refreshSupport;let r={capabilities:{typeDefinitionProvider:!0,workspaceSymbolProvider:!0,textDocumentSync:Re.TextDocumentSyncKind.Incremental,renameProvider:{prepareProvider:!0},completionProvider:{resolveProvider:!0,triggerCharacters:["&","="," ",'"',"(",","]},codeActionProvider:{codeActionKinds:[Re.CodeActionKind.QuickFix,Re.CodeActionKind.SourceFixAll]},documentSymbolProvider:!0,documentLinkProvider:{resolveProvider:!1},foldingRangeProvider:!0,definitionProvider:!0,declarationProvider:!0,referencesProvider:!0,hoverProvider:!0,signatureHelpProvider:{triggerCharacters:["<","("],retriggerCharacters:[" ",","]}}};return WP||(r.capabilities.semanticTokensProvider={legend:{tokenTypes:Wc,tokenModifiers:zc},full:!0}),zP||(r.capabilities.documentFormattingProvider=!0),GP||(r.capabilities.documentRangeFormattingProvider=!0),Rg&&(r.capabilities.workspace={workspaceFolders:{changeNotifications:!0,supported:!0}}),await gj(t.initializationOptions),r});var KP,zQ={tabSize:8,insertSpaces:!1,trimTrailingWhitespace:!0,insertFinalNewline:!0,wordWrapColumn:100},fj=t=>({tabSize:t?.["editor.tabSize"],insertSpaces:t?.["editor.insertSpaces"],trimFinalNewlines:t?.["files.trimFinalNewlines"],trimTrailingWhitespace:t?.["files.trimTrailingWhitespace"],insertFinalNewline:t?.["editor.insertFinalNewline"],wordWrapColumn:t?.["editor.wordWrapColumn"],removeMacroMultiline:t?.["editor.removeMacroMultiline"],wrapLongLines:t?.["editor.wrapLongLines"],indentExpressions:t?.["editor.indentExpressions"],removeEmptyReferences:t?.["editor.removeEmptyReferences"],removeEmptyNodes:t?.["editor.removeEmptyNodes"],removeEmptyRoots:t?.["editor.removeEmptyRoots"],sortNodesAndProperties:t?.["editor.sortNodesAndProperties"]});X.onInitialized(async()=>{if(WP&&await X.client.register(Re.SemanticTokensRegistrationType.type,{documentSelector:[{scheme:"file",language:"devicetree"}],legend:{tokenTypes:Wc,tokenModifiers:zc},full:!0}),zP&&await X.client.register(Re.DocumentFormattingRequest.type,{documentSelector:[{scheme:"file",language:"devicetree"}]}),GP&&await X.client.register(Re.DocumentRangeFormattingRequest.type,{documentSelector:[{scheme:"file",language:"devicetree"}]}),ZP&&(X.client.register(Re.DidChangeConfigurationNotification.type,{}),!KP)){let t=await X.workspace.getConfiguration("editor").catch(()=>{}),e=await X.workspace.getConfiguration("files").catch(()=>{}),r=await X.workspace.getConfiguration("[devicetree]").catch(()=>{}),n=fj(r);(t||e||n)&&(KP={...t,...e,...n})}Rg&&X.workspace.onDidChangeWorkspaceFolders(async t=>{X.console.log("Workspace folder change event received"),await sd()})});X.onRequest("workspace/workspaceFolders",async()=>YP??null);var GQ=async t=>{let e=pj();return e={...Qs,...e},Zu(e,t??await id())},XP=async t=>{let e=XQ();return e={...Qs,...e},Zu(e,t??await id())},YQ=async t=>{let e=JQ();return e={...Qs,...e},Zu(e,t??await id())},nd=async t=>{let e=KQ();return e={...Qs,...e},Zu(e,t??await id())},id=async()=>Rg?await X.workspace.getWorkspaceFolders()??[]:[],sj=async t=>{let e=Er(xe,{id:Ki(t)});if(e)return e.ctxNames.includes(t.ctxName)||console.log(`(ID: ${e.id}) Adding name ${t.ctxName} for [${e.ctxNames.join(",")}]`),e.addCtxName(t.ctxName),e;let r=Ki(t);console.log(`(ID: ${r}) New context [${t.ctxName}]`),console.log(`(ID: ${r}) Settings: ${JSON.stringify(t,void 0," ")}`);let n=(0,Pc.join)((0,Pc.dirname)(t.dtsFile),"dts","bindings"),i=new Sp(t,KP??zQ,t.bindingType?qB({zephyrBindings:t.zephyrBindings?[n,...t.zephyrBindings]:[n],deviceOrgBindingsMetaSchema:t.deviceOrgBindingsMetaSchema??[],deviceOrgTreeBindings:t.deviceOrgTreeBindings??[]},t.bindingType):void 0);xe.push(i);let s=performance.now();await i.stable(),console.log(`(ID: ${r}) New context took ${performance.now()-s}ms to start [${t.ctxName}]`),oj(i);let o=await eo(i);return X.sendNotification("devicetree/contextCreated",{ctxNames:i.ctxNames.map(a=>a.toString()),id:i.id,...i.getFileTree(),settings:i.settings,active:i===le,type:o.type}),await WQ(i),await nk(),i},sd=async()=>{let t=await XP(),e=await nd();e.allowAdhocContexts||(e=await XP());let r=e.contexts.map(Ki),n=xe.filter(i=>!r.includes(i.id));await Promise.all(n.map(JP)),await t.contexts?.reduce((i,s)=>i.then(async()=>{await sj(s)}),Promise.resolve()),e.allowAdhocContexts&&await(await GQ()).contexts?.reduce((s,o)=>s.then(async()=>{Er(xe,{fsPath:o.dtsFile})||await sj(o)}),Promise.resolve()),setTimeout(async()=>{Zs?await Sr({fsPath:Zs}):!le&&xe.length&&(console.log(`No active context using first context (ID: ${xe[0].id}) [${xe[0].ctxNames.join(",")}]`),await Sr({id:xe[0].id}))})},hn,cs,td=new Map,_c=new Map,KQ=()=>!cs&&!hn?void 0:{...Object.fromEntries(Object.entries(cs??{}).filter(([,r])=>r!==void 0)),...hn,contexts:[...hn?.contexts??[],...Array.from(_c.values()),...Array.from(td.values())]},pj=()=>!cs&&!hn?void 0:{...cs,...hn,contexts:[...Array.from(td.values())]},XQ=()=>!cs&&!hn?void 0:{...cs,...hn,contexts:[...hn?.contexts??[],...Array.from(_c.values())]},JQ=()=>!cs&&!hn?void 0:{...hn,contexts:[...hn?.contexts??[]]};function QQ(t){let e={...t};for(let r in e)e[r]===null&&delete e[r];return e}var hj=async()=>{let t=await nd();console.log("Resolved settings",JSON.stringify(t,void 0," ")),X.sendNotification("devicetree/settingsChanged",t),await sd(),Me().then(()=>{lj&&X.languages.diagnostics.refresh()})},ZQ=async()=>{let t=le?.getContextFiles();await Promise.all(Array.from(lr.keys()).filter(wt).map(async e=>{t?.some(r=>fe(r,Ne(e)))||await X.sendDiagnostics({uri:e,version:lr.get(e)?.version,diagnostics:[{severity:Re.DiagnosticSeverity.Information,range:Re.Range.create(Re.Position.create(0,0),Re.Position.create(0,0)),message:"File not in active context",source:"devicetree"}]})}))},ek=async t=>{let e=xT(xe,t);if(e.length)e.sort((r,n)=>r===le?-1:n===le?1:0).forEach(r=>{Ng.get(r)?.abort.abort(),le===r&&X.sendNotification("devicetree/activeContextBusyNotification",r.id),X.sendNotification("devicetree/contextBusyNotification",r.id);let n=new AbortController,i=new Promise(s=>{setTimeout(async()=>{if(r.setStaleFsPath(t),n.signal.aborted){console.log("Abort parsing due to new request"),s();return}let o=performance.now(),a=le===r,c=a?mj(r):[],l=r.getContextFiles();if(await r.reevaluate(t),oj(r),l.forEach(p=>ed.get(p)?.unwatch()),a&&ik(r)?.length&&(tk(r).then(p=>{let m=p.items.map(h=>({uri:h.uri,version:h.version??void 0,diagnostics:h.items}));rd(r,c.filter(h=>m.every(y=>y.uri!==h.uri))),m.forEach(h=>{X.sendDiagnostics(h)}),ad.set(r,!0)}),Zs)){let p=r.getFsPathParser(Zs);p&&setTimeout(()=>{p.latestSemanticTokensBuilt||X.languages.semanticTokens.refresh()},50)}let u=await eo(r),d=r.getFileTree(),f={ctxNames:r.ctxNames.map(p=>p.toString()),id:r.id,...d,settings:r.settings,active:a,type:u.type};le===r&&X.sendNotification("devicetree/activeContextStableNotification",f),X.sendNotification("devicetree/contextStableNotification",f),s(),console.log("reevaluate",performance.now()-o)})});Ng.set(r,{abort:n,promise:i})});else{if((await nd()).allowAdhocContexts===!1)return;await sd(),await Sr({fsPath:t})}},eZ=t=>lr.keys().find(e=>fe(Ne(e),t)),od=t=>{let e=eZ(t);if(e)return lr.get(e)},mj=t=>t.getContextFiles().map(e=>({uri:ue(e),version:od(e)?.version,diagnostics:[]})),ad=new WeakMap,rd=async(t,e=mj(t),r=!1)=>{if(!r&&t!==le)return;let n=performance.now();await Promise.all(e.filter(i=>t===le||!le?.getContextFiles().some(s=>fe(Ne(i.uri),s))).map(i=>X.sendDiagnostics({uri:i.uri,version:lr.get(i.uri)?.version,diagnostics:[]}))),ad.delete(t),console.log(`(ID: ${t.id})`,"clear workspace diagnostics",`[${t.ctxNames.join(",")}]`,performance.now()-n)},kg=new Map,tZ=async t=>{let e=kg.get(t);if(e||!ZP)return e;kg.delete(t);let r=await X.workspace.getConfiguration({scopeUri:ue(t),section:"[devicetree]"}).catch(()=>{});if(r){let n=fj(r);return kg.set(t,n),n}},tk=async t=>{await t.stable();let e=performance.now(),r=await t.getDiagnostics(),n=await Promise.all(t.getContextFiles().map(async i=>{let s=od(i),o=[];if(s&&t.settings.showFormattingErrorAsDiagnostics){let a=await tZ(i);o.push(...(await Ai({textDocument:s,options:{...t.formattingOptions,...a}},s.getText(),"File Diagnostics").catch(()=>[])).map(c=>c.diagnostic()))}return{uri:ue(i),kind:Re.DocumentDiagnosticReportKind.Full,items:[...r.get(i)??[],...o],version:s?.version??null}}));return console.log(`(ID: ${t.id})`,"workspace diagnostics",`[${t.ctxNames.join(",")}]`,performance.now()-e),{items:[...n]}},rk=async t=>{let{items:e}=await tk(t);e.map(r=>({uri:r.uri,version:r.version??void 0,diagnostics:r.items})).forEach(async r=>{X.sendDiagnostics(r)}),ad.set(t,!0)},nk=async()=>{let t=await Promise.all(xe.map(e=>eo(e)));console.log("======== Context List ========"),t.forEach(e=>{console.log(`(ID: ${e.ctx.id}) [${e.ctx.ctxNames.join(",")}]`,`[${e.type}]`,le===e.ctx?" [ACTIVE]":"")}),console.log("==============================")},eo=async(t,e)=>{let r=await QP(t,e),n=!r&&await HQ(t,e);return{ctx:t,type:r?"Ad Hoc":n?"User":"3rd Party"}},Sr=async(t,e=!1)=>{if("fsPath"in t){if(!wt(t.fsPath))return!1;Zs=t.fsPath,console.log("Active File Uri",Zs)}let r=await nd();if(le&&!e&&!r.autoChangeContext||(await Me(),!e&&le?.getContextFiles().find(o=>"fsPath"in t&&fe(o,t.fsPath))))return!1;let n=le,i=Er(xe,t),s=n!==i;return s&&(n&&rd(n),le=i,i?(eo(i).then(async o=>{let a=i.getFileTree();!i||i!==le&&!xe.includes(i)||X.sendNotification("devicetree/newActiveContext",{ctxNames:i.ctxNames.map(c=>c.toString()),id:i.id,...a,settings:i.settings,active:le===i,type:o.type})}),ik(i)?.length&&rk(i),await nk()):X.sendNotification("devicetree/newActiveContext",void 0)),dj&&X.languages.foldingRange.refresh(),uj&&X.languages.semanticTokens.refresh(),s};lr.listen(X);var ik=t=>t?.getContextFiles()?.filter(e=>od(e));lr.onDidSave(t=>{Eg.set(Ne(t.document.uri),t.document.version)});lr.onDidClose(async t=>{let e=Ne(t.document.uri);if(!wt(e))return;Eg.delete(e);let r=xT(xe,e);if(r.length===0){td.delete(e),X.sendDiagnostics({uri:t.document.uri,version:lr.get(t.document.uri)?.version,diagnostics:[]});return}await Promise.all(r.map(async n=>{!!ik(n)?.filter(s=>s!==e).length?le?.getContextFiles().some(s=>fe(s,e))?le?.getContextFiles().some(s=>fe(s,e))&&(await rd(le),await rk(le)):X.sendDiagnostics({uri:t.document.uri,version:lr.get(t.document.uri)?.version,diagnostics:[]}):await QP(n)?(await JP(n),td.delete(n.settings.dtsFile)):rd(n)}))});lr.onDidOpen(async t=>{let e=Ne(t.document.uri);if(!wt(e))return;Eg.set(e,t.document.version),await Me(),ZQ();let r=Er(xe,{fsPath:e});if(console.log("onDidOpen",r?.id,e),r)r!==le?await Sr({id:r.id}):r===le&&(!ad.get(r)||r.getContextFiles().some(n=>!fe(n,e)))&&await rk(r);else{let n={ctxName:(0,Pc.basename)(e),dtsFile:e};td.set(e,n),await ek(e)}});lr.onDidChangeContent(async t=>{let e=Ne(t.document.uri);if(!wt(e))return;let r=t.document.getText(),n=$r();n.needsRenew(e,r)&&(console.log("Content changed",e),n.renewLexer(e,r),await ek(e))});var gj=async t=>{t?.settings?.devicetree&&(hn=HB(QQ(t.settings.devicetree)),hn=Object.fromEntries(Object.entries(hn??{}).filter(([,e])=>e!==void 0)),console.log("Configuration changed",JSON.stringify(t,void 0," ")),await hj())};X.onDidChangeConfiguration(async t=>{await gj(t)});X.listen();X.languages.diagnostics.onWorkspace(async()=>{await Me();let t=le;return t?tk(t).finally(()=>{ad.set(t,!0)}):{items:[]}});X.onDidChangeWatchedFiles(t=>{X.console.log("We received a file change event")});X.onCompletion(async t=>{let e=Ne(t.textDocument.uri);if((e.endsWith(".c")||e.endsWith(".cpp"))&&le&&le.bindingLoader?.type==="Zephyr")return IA(t,le,lr.get(t.textDocument.uri));if(!wt(e))return[];await Me(),Sr({fsPath:e});let r=Wr(e);return r?[...await g0(t,r),...await lI(t,r)]:[]});X.onCompletionResolve(t=>t);var Wr=t=>{let e=pj();return Er(xe,{fsPath:t},le,e?.preferredContext)};X.onDocumentSymbol(async t=>{let e=Ne(t.textDocument.uri);if(!wt(e))return null;await Me();let r=Wr(e);return r?r.getFsPathParser(e)?.getDocumentSymbols(e):[]});X.onWorkspaceSymbol(async()=>{await Me();let t=le;return t?(await t.getAllStableParsers()).flatMap(e=>e.getWorkspaceSymbols()):[]});X.languages.semanticTokens.on(async t=>{let e=Ne(t.textDocument.uri);if(!wt(e))return{data:[]};try{await Me();let r=Wr(e),n=new Re.SemanticTokensBuilder,i=r?.isInContext(e);return!r||!i?{data:[]}:((await r.getAllStableParsers()).forEach(s=>s.buildSemanticTokens(n,e)),n.build())}catch(r){throw console.log(r),r}});X.onDocumentLinks(async t=>{await Me();let e=Ne(t.textDocument.uri);return wt(e)?Wr(e)?.getDocumentLinks(e):e.endsWith(".yaml")&&le?le.bindingLoader?.getDocumentLinks?.(lr.get(t.textDocument.uri))??[]:null});X.onPrepareRename(async t=>{let e=Ne(t.textDocument.uri);if(!wt(e))return;await Me(),Sr({fsPath:e});let r=Wr(e);return $A(t,r)});X.onRenameRequest(async t=>{let e=Ne(t.textDocument.uri);if(!wt(e))return;await Me(),Sr({fsPath:e});let r=Wr(e);return qA(t,r)});X.onReferences(async t=>{let e=Ne(t.textDocument.uri);if(!wt(e))return;await Me(),Sr({fsPath:e});let r=Wr(e);return OA(t,r)});X.onDefinition(async t=>{let e=Ne(t.textDocument.uri);if((e.endsWith(".c")||e.endsWith(".cpp"))&&le&&le.bindingLoader?.type==="Zephyr")return jA(t,le,lr.get(t.textDocument.uri));if(!wt(e))return;await Me(),Sr({fsPath:e});let r=Wr(e),n=(await r?.getDocumentLinks(e,t.position))?.filter(i=>i.target).map(i=>Re.Location.create(i.target,i.range))??[];return n.length?n:BA(t,r)});X.onDeclaration(async t=>{let e=Ne(t.textDocument.uri);if((e.endsWith(".c")||e.endsWith(".cpp"))&&le&&le.bindingLoader?.type==="Zephyr")return WA(t,le,lr.get(t.textDocument.uri));if(!wt(e))return;await Me(),Sr({fsPath:e});let r=Wr(e);return VA(t,r)});X.onCodeAction(async t=>{let e=Ne(t.textDocument.uri);if(wt(e))return GA(t)});var yj=async t=>{if(!wt(t.textDocument.uri))return;let e=Ne(t.textDocument.uri);if(!wt(e))return;await Me(),Sr({fsPath:e});let r=Wr(e);if(!r)return[];if((await r.getSyntaxIssues(void 0,l=>ho(l.raw,e,!1)?l:void 0)).get(e)?.length)return[];let i=lr.get(t.textDocument.uri)??$r().getDocument(e),s=i.getText();kg.set(e,t.options);let o=await Ai({...t,options:{...r.formattingOptions,...t.options}},s,"New Text").catch(()=>s);if(o===s)return[];let a=i.lineCount-1,c=i.getText({start:{line:a,character:0},end:{line:a+1,character:0}}).length;return[Re.TextEdit.replace(Re.Range.create(Re.Position.create(0,0),Re.Position.create(i.lineCount,c)),o)]};X.onDocumentRangeFormatting(yj);X.onDocumentFormatting(yj);X.onHover(async t=>{let e=Ne(t.textDocument.uri);if((e.endsWith(".c")||e.endsWith(".cpp"))&&le&&le.bindingLoader?.type==="Zephyr")return Ix(t,le,lr.get(t.textDocument.uri));if(!wt(e))return;await Me();let r=Wr(e);return(await uI(t,r)).at(0)});X.onFoldingRanges(async t=>{let e=Ne(t.textDocument.uri);if(!wt(e))return;await Me();let r=Wr(e),n=r?.isInContext(e);if(!r||!n)return[];let i=(await r.getAllStableParsers()).find(s=>s.getFiles().some(o=>o===e));return i?$B(e,i):[]});X.onTypeDefinition(async t=>{let e=Ne(t.textDocument.uri);if(!wt(e))return;await Me(),Sr({fsPath:e});let r=Wr(e);return UB(t,r)});X.onSignatureHelp(async t=>{let e=Ne(t.textDocument.uri);if(!wt(e))return;await Me(),Sr({fsPath:e});let r=Wr(e);return XB(t,r)});X.onRequest("devicetree/getContexts",async()=>(await Me(),Promise.all(xe.map(async t=>{let e=await eo(t);return{ctxNames:t.ctxNames.map(r=>r.toString()),id:t.id,...t.getFileTree(),settings:t.settings,active:le===t,type:e.type}}))));X.onRequest("devicetree/setActive",async t=>(await Me(),console.log("devicetree/setActive",t),await Sr(t,!0)));X.onRequest("devicetree/getActiveContext",async()=>{if(await Me(),console.log("devicetree/getActiveContext"),!le)return;let t=await eo(le);return le?{ctxNames:le.ctxNames.map(e=>e.toString()),id:le.id,...le.getFileTree(),settings:le.settings,active:!0,type:t.type}:void 0});X.onRequest("devicetree/setDefaultSettings",async t=>{await Me(),cs=Object.fromEntries(Object.entries(t??{}).filter(([,e])=>e!==void 0)),console.log("Integration Settings",cs),await hj()});X.onRequest("devicetree/requestContext",async t=>{await Me();let e=await id(),r=await nd(e),n=await UP(t,r,e);if(!n)throw console.log("Failed to resolve context",t),new Error("Failed to resolve context");console.log("devicetree/requestContext",n);let i=Ki(n),s=Array.from(_c).find(([,c])=>c.ctxName===t.ctxName);if(s){let c=s[0].split(":",1)[0];Er(xe,{name:n.ctxName.toString()})?.removeCtxName(n.ctxName),console.log(`Removing integration context with ID ${c} and name ${t.ctxName}`),_c.delete(s[0])}_c.set(`${i}:${t.ctxName}`,t),await sd();let o=xe.find(c=>c.id===i);if(!o)throw new Error("Failed to create context");let a=await eo(o,e);return{ctxNames:o.ctxNames.map(c=>c.toString()),id:i,...o.getFileTree(),settings:o.settings,active:!0,type:a.type}});X.onRequest("devicetree/removeContext",async({id:t,name:e})=>{await Me(),_c.delete(`${t}:${e}`);let r=Er(xe,{id:t});if(r){if(r.removeCtxName(e),r.ctxNames.length){console.log("Context will not be deleted as it is still in use by others");return}await sd()}});X.onRequest("devicetree/compiledDtsOutput",async t=>{if(await Me(),!t)return;let e=Er(xe,{id:t});if(!e||!e.settings.dtsFile){console.log("Context or DTS file not found for ID",t);return}let r=await e.toFullString();return Ai({textDocument:{uri:ue(e.settings.dtsFile)},options:e.formattingOptions},r,"New Text").catch(()=>r)});X.onRequest("devicetree/serializedContext",async t=>{if(await Me(),!t)return;let e=Er(xe,{id:t}),r=performance.now();return e?.serialize().finally(()=>{console.info("serializedContext",performance.now()-r)})});X.onRequest("devicetree/activePath",async t=>{if(await Me(),!le)return;let e=r=>{if(r?.item)return r.item instanceof J?{nodePath:r.item.pathString}:{nodePath:r.item.parent.pathString,propertyName:r.item.name}};return(await Et(t,le,r=>[e(r)])).at(0)});X.onRequest("devicetree/customActions",async t=>(await Me(),YB(t,le)));X.onRequest("devicetree/activeFsPath",async t=>{await Me(),Sr({fsPath:t})});X.onRequest("devicetree/formattingText",async t=>{let e=Ne(t.textDocument.uri),r=od(e)??$r().getDocument(e,t.text),n=await Ai(t,r.getText(),"New Text");return{text:n,diagnostics:(await Ai(t,r.getText(),"File Diagnostics")).map(i=>i.diagnostic()),nonActionableDiagnostics:(await Ai(t,n,"File Diagnostics")).map(i=>i.diagnostic())}});X.onRequest("devicetree/formatTextEdits",async t=>{await Me();let e=$r().getDocument(Ne(t.textDocument.uri),t.text),r=e.positionAt(e.getText().length),n=Re.TextEdit.replace(Re.Range.create(Re.Position.create(0,0),r),""),i=LT(e,t.edits),s=await Ai({...t},i,"New Text").catch(()=>i);return n.newText=s,n});X.onRequest("devicetree/diagnosticIssues",async({uri:t,full:e})=>{await Me();let r=Ne(t);Sr({fsPath:r});let n=Wr(r);if(!n)return[];let i=e?(await n.getDiagnostics()).get(r):(await n.getSyntaxIssues(void 0,s=>ho(s.raw,r,!!e)?s:void 0)).get(r);if(i?.length)return i});X.onRequest("devicetree/evalMacros",async({macros:t,ctxId:e})=>{await Me();let r=Er(xe,{id:e});return r?t.map(n=>{let i=Gc(n,r.macros),s=Le(i);return{macro:n,evaluated:typeof s=="number"?s:i}}):[]});X.onRequest("devicetree/memoryViews",async({ctxId:t})=>{let e=Er(xe,{id:t});if(!e)return;await e?.stable();let r=await e.getRuntime(),n=r.rootNode.getMemoryViews(r.context.macros).sort((o,a)=>{let c=qt(o.start,a.start);return c===0?qt(a.size,o.size):c}),i=new Map;n.forEach(o=>{let a=i.get(o.name),c={nodePath:o.nodePath,labels:o.labels,start:o.start,size:o.size,disabled:o.disabled};a?a.partitions.push(c):i.set(o.name,{name:o.name,partitions:[c],path:o.nodePath})});let s=nj(Array.from(i.values()));return{trees:s,treeStr:ij(s)}});X.onRequest("devicetree/zephyrTypeBindings",async t=>{if(await Me(),!t)return;let e=Er(xe,{id:t});return e?.bindingLoader?.getZephyrContextBinding()?.map(r=>({...r,vendor:r.compatible&&e?.bindingLoader?.getBindingVendorString(r.compatible)}))});X.onRequest("devicetree/contextMacroNames",async t=>{if(await Me(),!t)return;let e=Er(xe,{id:t});return Array.from(e?.macros.keys()??[])});X.onRequest("devicetree/locationScopedInformation",async t=>{await Me();let e=Er(xe,{id:t.id}),r=Ne(t.textDocument.uri);if(!(!e||!e.isInContext(r)))return new Promise(async n=>{let i=await e.getRuntime(),s=await Et(t,e,(o,a)=>{let c=i.context.macros,l={};if(!o?.item)return i.rootNode.serialize(l,c,a),[{inNode:!1,inScope:l,parentNode:i.rootNode.pathString}];let u=null;return o.item instanceof J?u=o.item:u=o.item?.parent,u.serialize(l,i.context.macros,a),[{inNode:!0,inScope:l,parentNode:u.pathString}]});n(s[0])})});
350
+ `)}var xe=[],le,Zs,Ng=new WeakMap,ed=new Map;ZB();var Eg=new Map,oj=t=>{t.settings.disableFileWatchers||t.getContextFiles().forEach(e=>{ed.has(e)||ed.set(e,new Pg(e,ek,()=>{let r=od(e),n=Eg.get(e);return!r||n===void 0?!1:n!==r.version})),ed.get(e)?.watch()})},JP=async t=>{let e=xe.indexOf(t);if(e===-1)return;rd(t,void 0,!0),Ng.delete(t),console.log(`(ID: ${t.id}) cleaning Context for [${t.ctxNames.join(",")}]`);let r=await eo(t);if(X.sendNotification("devicetree/contextDeleted",{ctxNames:t.ctxNames.map(n=>n.toString()),id:t.id,...t.getFileTree(),settings:t.settings,active:le===t,type:r.type}),xe.splice(e,1),await nk(),t===le&&(le=void 0,xe.length)){let n=Zs?Er(xe,{fsPath:Zs}):void 0;n??=xe[0],console.log("Active context was deleted. Forcing active to",n.id),await Sr({id:n.id},!0)}t.settings.disableFileWatchers||t.getContextFiles().map(n=>{ed.get(n)?.unwatch()}),setTimeout(async()=>{await Me();let n=new Set(xe.flatMap(i=>i.getContextFiles()));t.getContextFiles().map(i=>{n.has(i)||$r().reset(i)})},2e3),t.bindingLoader?.dispose()},jQ=t=>{let e=Ng.get(t);if(!e?.abort.signal.aborted)return Promise.all([e?.promise,t.getRuntime()])},Me=async()=>{await Promise.all(xe.map(jQ))},QP=async(t,e)=>(await aj(e)).indexOf(t)!==-1,aj=async t=>{let e=await cj(t);return xe.filter(r=>!e.some(n=>n===r))},cj=async t=>{let e=await XP(t);return xe.filter(r=>e.contexts.find(n=>Ki(n)===r.id))},UQ=async t=>{let e=await YQ(t);return xe.filter(r=>e.contexts.find(n=>Ki(n)===r.id))},HQ=async(t,e)=>(await UQ(e)).indexOf(t)!==-1,VQ=async(t,e)=>{if(t===e)return!0;let r=(await t.getAllStableParsers()).flatMap(i=>i.cPreprocessorParser.dtsIncludes).filter(i=>i.resolvedPath),n=(await e.getAllStableParsers()).flatMap(i=>i.cPreprocessorParser.dtsIncludes).filter(i=>i.resolvedPath);return n.some(i=>fe(i.resolvedPath,t.parser.fsPath))&&r.length?r.every(i=>n.some(s=>s.resolvedPath===i.resolvedPath&&s.firstToken.pos.col===i.firstToken.pos.col&&s.firstToken.pos.len===i.firstToken.pos.len&&s.firstToken.pos.line===i.firstToken.pos.line&&s.lastToken.pos.col===i.lastToken.pos.col&&s.lastToken.pos.len===i.lastToken.pos.len&&s.lastToken.pos.line===i.lastToken.pos.line)):e.getContextFiles().some(i=>fe(i,t.parser.fsPath))},WQ=async t=>{if(!await QP(t))return;let e=await aj(),r=await cj(),n=await Wf(e);if(xe.indexOf(t)===-1)return;let i=await Promise.all(n.flatMap(a=>[...r,...e.filter(c=>c!==a.context)].map(async c=>({context:a.context,same:await VQ(a.context,c)})))),s=t.getContextFiles(),o=n.filter(a=>i.some(c=>c.context===a.context&&c.same)||a.context!==t&&fe(a.context.parser.fsPath,t.parser.fsPath)&&s.some(c=>c&&a.files.indexOf(c)!==-1)).map(a=>a.context);o.length&&await Promise.all(o.map(JP))},X=(0,Re.createConnection)(Re.ProposedFeatures.all),lr=new Re.TextDocuments(Lt),ZP=!1,Rg=!1,lj=!1,uj=!1,dj=!1,WP=!1,zP=!1,GP=!1,YP;X.onInitialize(async t=>{YP=t.workspaceFolders??[],X.console.log(`[Server(${process.pid}) ${YP?.at(0)?.uri} Version 0.14.6 ] Started and initialize received`);let e=t.capabilities;ZP=!!(e.workspace&&e.workspace.configuration),Rg=!!(e.workspace&&e.workspace.workspaceFolders),lj=!!e.workspace?.diagnostics?.refreshSupport,uj=!!e.workspace?.semanticTokens?.refreshSupport,WP=!!e.textDocument?.semanticTokens?.dynamicRegistration,zP=!!e.textDocument?.formatting?.dynamicRegistration,GP=!!e.textDocument?.rangeFormatting?.dynamicRegistration,dj=!!e.workspace?.foldingRange?.refreshSupport;let r={capabilities:{typeDefinitionProvider:!0,workspaceSymbolProvider:!0,textDocumentSync:Re.TextDocumentSyncKind.Incremental,renameProvider:{prepareProvider:!0},completionProvider:{resolveProvider:!0,triggerCharacters:["&","="," ",'"',"(",","]},codeActionProvider:{codeActionKinds:[Re.CodeActionKind.QuickFix,Re.CodeActionKind.SourceFixAll]},documentSymbolProvider:!0,documentLinkProvider:{resolveProvider:!1},foldingRangeProvider:!0,definitionProvider:!0,declarationProvider:!0,referencesProvider:!0,hoverProvider:!0,signatureHelpProvider:{triggerCharacters:["<","("],retriggerCharacters:[" ",","]}}};return WP||(r.capabilities.semanticTokensProvider={legend:{tokenTypes:Wc,tokenModifiers:zc},full:!0}),zP||(r.capabilities.documentFormattingProvider=!0),GP||(r.capabilities.documentRangeFormattingProvider=!0),Rg&&(r.capabilities.workspace={workspaceFolders:{changeNotifications:!0,supported:!0}}),await gj(t.initializationOptions),r});var KP,zQ={tabSize:8,insertSpaces:!1,trimTrailingWhitespace:!0,insertFinalNewline:!0,wordWrapColumn:100},fj=t=>({tabSize:t?.["editor.tabSize"],insertSpaces:t?.["editor.insertSpaces"],trimFinalNewlines:t?.["files.trimFinalNewlines"],trimTrailingWhitespace:t?.["files.trimTrailingWhitespace"],insertFinalNewline:t?.["editor.insertFinalNewline"],wordWrapColumn:t?.["editor.wordWrapColumn"],removeMacroMultiline:t?.["editor.removeMacroMultiline"],wrapLongLines:t?.["editor.wrapLongLines"],indentExpressions:t?.["editor.indentExpressions"],removeEmptyReferences:t?.["editor.removeEmptyReferences"],removeEmptyNodes:t?.["editor.removeEmptyNodes"],removeEmptyRoots:t?.["editor.removeEmptyRoots"],sortNodesAndProperties:t?.["editor.sortNodesAndProperties"]});X.onInitialized(async()=>{if(WP&&await X.client.register(Re.SemanticTokensRegistrationType.type,{documentSelector:[{scheme:"file",language:"devicetree"}],legend:{tokenTypes:Wc,tokenModifiers:zc},full:!0}),zP&&await X.client.register(Re.DocumentFormattingRequest.type,{documentSelector:[{scheme:"file",language:"devicetree"}]}),GP&&await X.client.register(Re.DocumentRangeFormattingRequest.type,{documentSelector:[{scheme:"file",language:"devicetree"}]}),ZP&&(X.client.register(Re.DidChangeConfigurationNotification.type,{}),!KP)){let t=await X.workspace.getConfiguration("editor").catch(()=>{}),e=await X.workspace.getConfiguration("files").catch(()=>{}),r=await X.workspace.getConfiguration("[devicetree]").catch(()=>{}),n=fj(r);(t||e||n)&&(KP={...t,...e,...n})}Rg&&X.workspace.onDidChangeWorkspaceFolders(async t=>{X.console.log("Workspace folder change event received"),await sd()})});X.onRequest("workspace/workspaceFolders",async()=>YP??null);var GQ=async t=>{let e=pj();return e={...Qs,...e},Zu(e,t??await id())},XP=async t=>{let e=XQ();return e={...Qs,...e},Zu(e,t??await id())},YQ=async t=>{let e=JQ();return e={...Qs,...e},Zu(e,t??await id())},nd=async t=>{let e=KQ();return e={...Qs,...e},Zu(e,t??await id())},id=async()=>Rg?await X.workspace.getWorkspaceFolders()??[]:[],sj=async t=>{let e=Er(xe,{id:Ki(t)});if(e)return e.ctxNames.includes(t.ctxName)||console.log(`(ID: ${e.id}) Adding name ${t.ctxName} for [${e.ctxNames.join(",")}]`),e.addCtxName(t.ctxName),e;let r=Ki(t);console.log(`(ID: ${r}) New context [${t.ctxName}]`),console.log(`(ID: ${r}) Settings: ${JSON.stringify(t,void 0," ")}`);let n=(0,Pc.join)((0,Pc.dirname)(t.dtsFile),"dts","bindings"),i=new Sp(t,KP??zQ,t.bindingType?qB({zephyrBindings:t.zephyrBindings?[n,...t.zephyrBindings]:[n],deviceOrgBindingsMetaSchema:t.deviceOrgBindingsMetaSchema??[],deviceOrgTreeBindings:t.deviceOrgTreeBindings??[]},t.bindingType):void 0);xe.push(i);let s=performance.now();await i.stable(),console.log(`(ID: ${r}) New context took ${performance.now()-s}ms to start [${t.ctxName}]`),oj(i);let o=await eo(i);return X.sendNotification("devicetree/contextCreated",{ctxNames:i.ctxNames.map(a=>a.toString()),id:i.id,...i.getFileTree(),settings:i.settings,active:i===le,type:o.type}),await WQ(i),await nk(),i},sd=async()=>{let t=await XP(),e=await nd();e.allowAdhocContexts||(e=await XP());let r=e.contexts.map(Ki),n=xe.filter(i=>!r.includes(i.id));await Promise.all(n.map(JP)),await t.contexts?.reduce((i,s)=>i.then(async()=>{await sj(s)}),Promise.resolve()),e.allowAdhocContexts&&await(await GQ()).contexts?.reduce((s,o)=>s.then(async()=>{Er(xe,{fsPath:o.dtsFile})||await sj(o)}),Promise.resolve()),setTimeout(async()=>{Zs?await Sr({fsPath:Zs}):!le&&xe.length&&(console.log(`No active context using first context (ID: ${xe[0].id}) [${xe[0].ctxNames.join(",")}]`),await Sr({id:xe[0].id}))})},hn,cs,td=new Map,_c=new Map,KQ=()=>!cs&&!hn?void 0:{...Object.fromEntries(Object.entries(cs??{}).filter(([,r])=>r!==void 0)),...hn,contexts:[...hn?.contexts??[],...Array.from(_c.values()),...Array.from(td.values())]},pj=()=>!cs&&!hn?void 0:{...cs,...hn,contexts:[...Array.from(td.values())]},XQ=()=>!cs&&!hn?void 0:{...cs,...hn,contexts:[...hn?.contexts??[],...Array.from(_c.values())]},JQ=()=>!cs&&!hn?void 0:{...hn,contexts:[...hn?.contexts??[]]};function QQ(t){let e={...t};for(let r in e)e[r]===null&&delete e[r];return e}var hj=async()=>{let t=await nd();console.log("Resolved settings",JSON.stringify(t,void 0," ")),X.sendNotification("devicetree/settingsChanged",t),await sd(),Me().then(()=>{lj&&X.languages.diagnostics.refresh()})},ZQ=async()=>{let t=le?.getContextFiles();await Promise.all(Array.from(lr.keys()).filter(wt).map(async e=>{t?.some(r=>fe(r,Ne(e)))||await X.sendDiagnostics({uri:e,version:lr.get(e)?.version,diagnostics:[{severity:Re.DiagnosticSeverity.Information,range:Re.Range.create(Re.Position.create(0,0),Re.Position.create(0,0)),message:"File not in active context",source:"devicetree"}]})}))},ek=async t=>{let e=xT(xe,t);if(e.length)e.sort((r,n)=>r===le?-1:n===le?1:0).forEach(r=>{Ng.get(r)?.abort.abort(),le===r&&X.sendNotification("devicetree/activeContextBusyNotification",r.id),X.sendNotification("devicetree/contextBusyNotification",r.id);let n=new AbortController,i=new Promise(s=>{setTimeout(async()=>{if(r.setStaleFsPath(t),n.signal.aborted){console.log("Abort parsing due to new request"),s();return}let o=performance.now(),a=le===r,c=a?mj(r):[],l=r.getContextFiles();if(await r.reevaluate(t),oj(r),l.forEach(p=>ed.get(p)?.unwatch()),a&&ik(r)?.length&&(tk(r).then(p=>{let m=p.items.map(h=>({uri:h.uri,version:h.version??void 0,diagnostics:h.items}));rd(r,c.filter(h=>m.every(y=>y.uri!==h.uri))),m.forEach(h=>{X.sendDiagnostics(h)}),ad.set(r,!0)}),Zs)){let p=r.getFsPathParser(Zs);p&&setTimeout(()=>{p.latestSemanticTokensBuilt||X.languages.semanticTokens.refresh()},50)}let u=await eo(r),d=r.getFileTree(),f={ctxNames:r.ctxNames.map(p=>p.toString()),id:r.id,...d,settings:r.settings,active:a,type:u.type};le===r&&X.sendNotification("devicetree/activeContextStableNotification",f),X.sendNotification("devicetree/contextStableNotification",f),s(),console.log("reevaluate",performance.now()-o)})});Ng.set(r,{abort:n,promise:i})});else{if((await nd()).allowAdhocContexts===!1)return;await sd(),await Sr({fsPath:t})}},eZ=t=>lr.keys().find(e=>fe(Ne(e),t)),od=t=>{let e=eZ(t);if(e)return lr.get(e)},mj=t=>t.getContextFiles().map(e=>({uri:ue(e),version:od(e)?.version,diagnostics:[]})),ad=new WeakMap,rd=async(t,e=mj(t),r=!1)=>{if(!r&&t!==le)return;let n=performance.now();await Promise.all(e.filter(i=>t===le||!le?.getContextFiles().some(s=>fe(Ne(i.uri),s))).map(i=>X.sendDiagnostics({uri:i.uri,version:lr.get(i.uri)?.version,diagnostics:[]}))),ad.delete(t),console.log(`(ID: ${t.id})`,"clear workspace diagnostics",`[${t.ctxNames.join(",")}]`,performance.now()-n)},kg=new Map,tZ=async t=>{let e=kg.get(t);if(e||!ZP)return e;kg.delete(t);let r=await X.workspace.getConfiguration({scopeUri:ue(t),section:"[devicetree]"}).catch(()=>{});if(r){let n=fj(r);return kg.set(t,n),n}},tk=async t=>{await t.stable();let e=performance.now(),r=await t.getDiagnostics(),n=await Promise.all(t.getContextFiles().map(async i=>{let s=od(i),o=[];if(s&&t.settings.showFormattingErrorAsDiagnostics){let a=await tZ(i);o.push(...(await Ai({textDocument:s,options:{...t.formattingOptions,...a}},s.getText(),"File Diagnostics").catch(()=>[])).map(c=>c.diagnostic()))}return{uri:ue(i),kind:Re.DocumentDiagnosticReportKind.Full,items:[...r.get(i)??[],...o],version:s?.version??null}}));return console.log(`(ID: ${t.id})`,"workspace diagnostics",`[${t.ctxNames.join(",")}]`,performance.now()-e),{items:[...n]}},rk=async t=>{let{items:e}=await tk(t);e.map(r=>({uri:r.uri,version:r.version??void 0,diagnostics:r.items})).forEach(async r=>{X.sendDiagnostics(r)}),ad.set(t,!0)},nk=async()=>{let t=await Promise.all(xe.map(e=>eo(e)));console.log("======== Context List ========"),t.forEach(e=>{console.log(`(ID: ${e.ctx.id}) [${e.ctx.ctxNames.join(",")}]`,`[${e.type}]`,le===e.ctx?" [ACTIVE]":"")}),console.log("==============================")},eo=async(t,e)=>{let r=await QP(t,e),n=!r&&await HQ(t,e);return{ctx:t,type:r?"Ad Hoc":n?"User":"3rd Party"}},Sr=async(t,e=!1)=>{if("fsPath"in t){if(!wt(t.fsPath))return!1;Zs=t.fsPath,console.log("Active File Uri",Zs)}let r=await nd();if(le&&!e&&!r.autoChangeContext||(await Me(),!e&&le?.getContextFiles().find(o=>"fsPath"in t&&fe(o,t.fsPath))))return!1;let n=le,i=Er(xe,t),s=n!==i;return s&&(n&&rd(n),le=i,i?(eo(i).then(async o=>{let a=i.getFileTree();!i||i!==le&&!xe.includes(i)||X.sendNotification("devicetree/newActiveContext",{ctxNames:i.ctxNames.map(c=>c.toString()),id:i.id,...a,settings:i.settings,active:le===i,type:o.type})}),ik(i)?.length&&rk(i),await nk()):X.sendNotification("devicetree/newActiveContext",void 0)),dj&&X.languages.foldingRange.refresh(),uj&&X.languages.semanticTokens.refresh(),s};lr.listen(X);var ik=t=>t?.getContextFiles()?.filter(e=>od(e));lr.onDidSave(t=>{Eg.set(Ne(t.document.uri),t.document.version)});lr.onDidClose(async t=>{let e=Ne(t.document.uri);if(!wt(e))return;Eg.delete(e);let r=xT(xe,e);if(r.length===0){td.delete(e),X.sendDiagnostics({uri:t.document.uri,version:lr.get(t.document.uri)?.version,diagnostics:[]});return}await Promise.all(r.map(async n=>{!!ik(n)?.filter(s=>s!==e).length?le?.getContextFiles().some(s=>fe(s,e))?le?.getContextFiles().some(s=>fe(s,e))&&(await rd(le),await rk(le)):X.sendDiagnostics({uri:t.document.uri,version:lr.get(t.document.uri)?.version,diagnostics:[]}):await QP(n)?(await JP(n),td.delete(n.settings.dtsFile)):rd(n)}))});lr.onDidOpen(async t=>{let e=Ne(t.document.uri);if(!wt(e))return;Eg.set(e,t.document.version),await Me(),ZQ();let r=Er(xe,{fsPath:e});if(console.log("onDidOpen",r?.id,e),r)r!==le?await Sr({id:r.id}):r===le&&(!ad.get(r)||r.getContextFiles().some(n=>!fe(n,e)))&&await rk(r);else{let n={ctxName:(0,Pc.basename)(e),dtsFile:e};td.set(e,n),await ek(e)}});lr.onDidChangeContent(async t=>{let e=Ne(t.document.uri);if(!wt(e))return;let r=t.document.getText(),n=$r();n.needsRenew(e,r)&&(console.log("Content changed",e),n.renewLexer(e,r),await ek(e))});var gj=async t=>{t?.settings?.devicetree&&(hn=HB(QQ(t.settings.devicetree)),hn=Object.fromEntries(Object.entries(hn??{}).filter(([,e])=>e!==void 0)),console.log("Configuration changed",JSON.stringify(t,void 0," ")),await hj())};X.onDidChangeConfiguration(async t=>{await gj(t)});X.listen();X.languages.diagnostics.onWorkspace(async()=>{await Me();let t=le;return t?tk(t).finally(()=>{ad.set(t,!0)}):{items:[]}});X.onDidChangeWatchedFiles(t=>{X.console.log("We received a file change event")});X.onCompletion(async t=>{let e=Ne(t.textDocument.uri);if((e.endsWith(".c")||e.endsWith(".cpp"))&&le&&le.bindingLoader?.type==="Zephyr")return IA(t,le,lr.get(t.textDocument.uri));if(!wt(e))return[];await Me(),Sr({fsPath:e});let r=Wr(e);return r?[...await g0(t,r),...await lI(t,r)]:[]});X.onCompletionResolve(t=>t);var Wr=t=>{let e=pj();return Er(xe,{fsPath:t},le,e?.preferredContext)};X.onDocumentSymbol(async t=>{let e=Ne(t.textDocument.uri);if(!wt(e))return null;await Me();let r=Wr(e);return r?r.getFsPathParser(e)?.getDocumentSymbols(e):[]});X.onWorkspaceSymbol(async()=>{await Me();let t=le;return t?(await t.getAllStableParsers()).flatMap(e=>e.getWorkspaceSymbols()):[]});X.languages.semanticTokens.on(async t=>{let e=Ne(t.textDocument.uri);if(!wt(e))return{data:[]};try{await Me();let r=Wr(e),n=new Re.SemanticTokensBuilder,i=r?.isInContext(e);return!r||!i?{data:[]}:((await r.getAllStableParsers()).forEach(s=>s.buildSemanticTokens(n,e)),n.build())}catch(r){throw console.log(r),r}});X.onDocumentLinks(async t=>{await Me();let e=Ne(t.textDocument.uri);return wt(e)?Wr(e)?.getDocumentLinks(e):e.endsWith(".yaml")&&le?le.bindingLoader?.getDocumentLinks?.(lr.get(t.textDocument.uri))??[]:null});X.onPrepareRename(async t=>{let e=Ne(t.textDocument.uri);if(!wt(e))return;await Me(),Sr({fsPath:e});let r=Wr(e);return $A(t,r)});X.onRenameRequest(async t=>{let e=Ne(t.textDocument.uri);if(!wt(e))return;await Me(),Sr({fsPath:e});let r=Wr(e);return qA(t,r)});X.onReferences(async t=>{let e=Ne(t.textDocument.uri);if(!wt(e))return;await Me(),Sr({fsPath:e});let r=Wr(e);return OA(t,r)});X.onDefinition(async t=>{let e=Ne(t.textDocument.uri);if((e.endsWith(".c")||e.endsWith(".cpp"))&&le&&le.bindingLoader?.type==="Zephyr")return jA(t,le,lr.get(t.textDocument.uri));if(!wt(e))return;await Me(),Sr({fsPath:e});let r=Wr(e),n=(await r?.getDocumentLinks(e,t.position))?.filter(i=>i.target).map(i=>Re.Location.create(i.target,i.range))??[];return n.length?n:BA(t,r)});X.onDeclaration(async t=>{let e=Ne(t.textDocument.uri);if((e.endsWith(".c")||e.endsWith(".cpp"))&&le&&le.bindingLoader?.type==="Zephyr")return WA(t,le,lr.get(t.textDocument.uri));if(!wt(e))return;await Me(),Sr({fsPath:e});let r=Wr(e);return VA(t,r)});X.onCodeAction(async t=>{let e=Ne(t.textDocument.uri);if(wt(e))return GA(t)});var yj=async t=>{if(!wt(t.textDocument.uri))return;let e=Ne(t.textDocument.uri);if(!wt(e))return;await Me(),Sr({fsPath:e});let r=Wr(e);if(!r)return[];if((await r.getSyntaxIssues(void 0,l=>ho(l.raw,e,!1)?l:void 0)).get(e)?.length)return[];let i=lr.get(t.textDocument.uri)??$r().getDocument(e),s=i.getText();kg.set(e,t.options);let o=await Ai({...t,options:{...r.formattingOptions,...t.options}},s,"New Text").catch(()=>s);if(o===s)return[];let a=i.lineCount-1,c=i.getText({start:{line:a,character:0},end:{line:a+1,character:0}}).length;return[Re.TextEdit.replace(Re.Range.create(Re.Position.create(0,0),Re.Position.create(i.lineCount,c)),o)]};X.onDocumentRangeFormatting(yj);X.onDocumentFormatting(yj);X.onHover(async t=>{let e=Ne(t.textDocument.uri);if((e.endsWith(".c")||e.endsWith(".cpp"))&&le&&le.bindingLoader?.type==="Zephyr")return Ix(t,le,lr.get(t.textDocument.uri));if(!wt(e))return;await Me();let r=Wr(e);return(await uI(t,r)).at(0)});X.onFoldingRanges(async t=>{let e=Ne(t.textDocument.uri);if(!wt(e))return;await Me();let r=Wr(e),n=r?.isInContext(e);if(!r||!n)return[];let i=(await r.getAllStableParsers()).find(s=>s.getFiles().some(o=>o===e));return i?$B(e,i):[]});X.onTypeDefinition(async t=>{let e=Ne(t.textDocument.uri);if(!wt(e))return;await Me(),Sr({fsPath:e});let r=Wr(e);return UB(t,r)});X.onSignatureHelp(async t=>{let e=Ne(t.textDocument.uri);if(!wt(e))return;await Me(),Sr({fsPath:e});let r=Wr(e);return XB(t,r)});X.onRequest("devicetree/getContexts",async()=>(await Me(),Promise.all(xe.map(async t=>{let e=await eo(t);return{ctxNames:t.ctxNames.map(r=>r.toString()),id:t.id,...t.getFileTree(),settings:t.settings,active:le===t,type:e.type}}))));X.onRequest("devicetree/setActive",async t=>(await Me(),console.log("devicetree/setActive",t),await Sr(t,!0)));X.onRequest("devicetree/getActiveContext",async()=>{if(await Me(),console.log("devicetree/getActiveContext"),!le)return;let t=await eo(le);return le?{ctxNames:le.ctxNames.map(e=>e.toString()),id:le.id,...le.getFileTree(),settings:le.settings,active:!0,type:t.type}:void 0});X.onRequest("devicetree/setDefaultSettings",async t=>{await Me(),cs=Object.fromEntries(Object.entries(t??{}).filter(([,e])=>e!==void 0)),console.log("Integration Settings",cs),await hj()});X.onRequest("devicetree/requestContext",async t=>{await Me();let e=await id(),r=await nd(e),n=await UP(t,r,e);if(!n)throw console.log("Failed to resolve context",t),new Error("Failed to resolve context");console.log("devicetree/requestContext",n);let i=Ki(n),s=Array.from(_c).find(([,c])=>c.ctxName===t.ctxName);if(s){let c=s[0].split(":",1)[0];Er(xe,{name:n.ctxName.toString()})?.removeCtxName(n.ctxName),console.log(`Removing integration context with ID ${c} and name ${t.ctxName}`),_c.delete(s[0])}_c.set(`${i}:${t.ctxName}`,t),await sd();let o=xe.find(c=>c.id===i);if(!o)throw new Error("Failed to create context");let a=await eo(o,e);return{ctxNames:o.ctxNames.map(c=>c.toString()),id:i,...o.getFileTree(),settings:o.settings,active:!0,type:a.type}});X.onRequest("devicetree/removeContext",async({id:t,name:e})=>{await Me(),_c.delete(`${t}:${e}`);let r=Er(xe,{id:t});if(r){if(r.removeCtxName(e),r.ctxNames.length){console.log("Context will not be deleted as it is still in use by others");return}await sd()}});X.onRequest("devicetree/compiledDtsOutput",async t=>{if(await Me(),!t)return;let e=Er(xe,{id:t});if(!e||!e.settings.dtsFile){console.log("Context or DTS file not found for ID",t);return}let r=await e.toFullString();return Ai({textDocument:{uri:ue(e.settings.dtsFile)},options:e.formattingOptions},r,"New Text").catch(()=>r)});X.onRequest("devicetree/serializedContext",async t=>{if(await Me(),!t)return;let e=Er(xe,{id:t}),r=performance.now();return e?.serialize().finally(()=>{console.info("serializedContext",performance.now()-r)})});X.onRequest("devicetree/activePath",async t=>{if(await Me(),!le)return;let e=r=>{if(r?.item)return r.item instanceof J?{nodePath:r.item.pathString}:{nodePath:r.item.parent.pathString,propertyName:r.item.name}};return(await Et(t,le,r=>[e(r)])).at(0)});X.onRequest("devicetree/customActions",async t=>(await Me(),YB(t,le)));X.onRequest("devicetree/activeFsPath",async t=>{await Me(),Sr({fsPath:t})});X.onRequest("devicetree/formattingText",async t=>{let e=Ne(t.textDocument.uri),r=od(e)??$r().getDocument(e,t.text),n=await Ai(t,r.getText(),"New Text");return{text:n,diagnostics:(await Ai(t,r.getText(),"File Diagnostics")).map(i=>i.diagnostic()),nonActionableDiagnostics:(await Ai(t,n,"File Diagnostics")).map(i=>i.diagnostic())}});X.onRequest("devicetree/formatTextEdits",async t=>{await Me();let e=$r().getDocument(Ne(t.textDocument.uri),t.text),r=e.positionAt(e.getText().length),n=Re.TextEdit.replace(Re.Range.create(Re.Position.create(0,0),r),""),i=LT(e,t.edits),s=await Ai({...t},i,"New Text").catch(()=>i);return n.newText=s,n});X.onRequest("devicetree/diagnosticIssues",async({uri:t,full:e})=>{await Me();let r=Ne(t);Sr({fsPath:r});let n=Wr(r);if(!n)return[];let i=e?(await n.getDiagnostics()).get(r):(await n.getSyntaxIssues(void 0,s=>ho(s.raw,r,!!e)?s:void 0)).get(r);if(i?.length)return i});X.onRequest("devicetree/evalMacros",async({macros:t,ctxId:e})=>{await Me();let r=Er(xe,{id:e});return r?t.map(n=>{let i=Gc(n,r.macros),s=Le(i);return{macro:n,evaluated:typeof s=="number"?s:i}}):[]});X.onRequest("devicetree/memoryViews",async({ctxId:t})=>{let e=Er(xe,{id:t});if(!e)return;await e?.stable();let r=await e.getRuntime(),n=r.rootNode.getMemoryViews(r.context.macros).sort((o,a)=>{let c=qt(o.start,a.start);return c===0?qt(a.size,o.size):c}),i=new Map;n.forEach(o=>{let a=i.get(o.name),c={nodePath:o.nodePath,labels:o.labels,start:o.start,size:o.size,disabled:o.disabled};a?a.partitions.push(c):i.set(o.name,{name:o.name,partitions:[c],path:o.nodePath})});let s=nj(Array.from(i.values()));return{trees:s,treeStr:ij(s)}});X.onRequest("devicetree/zephyrTypeBindings",async t=>{if(await Me(),!t)return;let e=Er(xe,{id:t});return e?.bindingLoader?.getZephyrContextBinding()?.map(r=>({...r,vendor:r.compatible&&e?.bindingLoader?.getBindingVendorString(r.compatible)}))});X.onRequest("devicetree/contextMacroNames",async t=>{if(await Me(),!t)return;let e=Er(xe,{id:t});return Array.from(e?.macros.keys()??[])});X.onRequest("devicetree/locationScopedInformation",async t=>{await Me();let e=Er(xe,{id:t.id}),r=Ne(t.textDocument.uri);if(!(!e||!e.isInContext(r)))return new Promise(async n=>{let i=await e.getRuntime(),s=await Et(t,e,(o,a)=>{let c=i.context.macros,l={};if(!o?.item)return i.rootNode.serialize(l,c,a),[{inNode:!1,inScope:l,parentNode:i.rootNode.pathString}];let u=null;return o.item instanceof J?u=o.item:u=o.item?.parent,u.serialize(l,i.context.macros,a),[{inNode:!0,inScope:l,parentNode:u.pathString}]});n(s[0])})});
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "author": "Kyle Micallef Bonnici",
5
5
  "package-name": "devicetree-language-server",
6
6
  "main": "dist/server.js",
7
- "version": "0.14.4",
7
+ "version": "0.14.6",
8
8
  "categories": [
9
9
  "Linters",
10
10
  "Formatters",