1import{autocomplete}from"../autocomplete.js";import{ide}from"../ide.js";import{i18n}from"../msg/i18n.js";import{msg}from"../msg/messages.js";import{util as utilweb}from"../util.js";import{util}from"../util_general.js";import{prog_language as plang}from"./prog_language.js";export var prog_language_cpp;!function(e){class t{constructor(){this.changeTracker=null,this.autocomplete=new n(this),this.inlineHelp=new s(this)}async start(){const e=`/studio/content/msg/generated/${ide.project.hwInterface.name}/cpp_api_info`;this.apiInfo=await i18n.loadJsonMessageSet(e),this.initStaticApiInfo(),await utilweb.getScript("/studio/content/jsx/robotmesh/cpp_autocomplete_parser.js")}parseAllLines(e){}getRegion(e,t,n=0){return plang.getRegionCpp(e,t,n)}isStringOrComment(e,t){return plang.isWithinMatch(e-1,/(\/\/.*)|(".*?("|$))|(\/\*.*?(\*\/|$))/g,t)}isNoOp(e,t){return console.error("isNoOp not implemented"),!0}parseUserCodeGetRelevantItems(e,n){const s={usingNamespaces:[""],items:[]},o=this.parseUserCode(),i={line:e+1,column:n};return t.flattenCodeUntilCursor(o,i,s),s}parseUserCode(){const e=ide.getAceEditorContent();return e?cpp_parser.parse(e):[]}static isObjectMemberExpression(e){return/(\.|-)/.test(e)}static flattenCodeUntilCursor(e,n,s){for(const i of e)if("using_namespace"==i.kind&&s.usingNamespaces.push(i.n),i.loc){if(plang.compareLocation(i.loc.start,plang.Comp.GreaterOrEqual,n))return!0;if(s.items.push(i),("block"==i.kind||"function"==i.kind)&&i.code&&i.code.length>0){if(plang.compareLocation(n,plang.Comp.Greater,i.loc.start)&&plang.compareLocation(n,plang.Comp.Less,i.loc.end)){if(t.flattenCodeUntilCursor(i.code,n,s))return!0}}else if("comment"==i.kind&&plang.compareLocation(n,plang.Comp.Greater,i.loc.start)&&plang.compareLocation(n,plang.Comp.Less,i.loc.end))throw o}return!1}findObjectAndClassMembers(e,t){const n=e.split(/\.|>|\[/),s=n.pop();if(0==n.length)return null;function o(e){const t=n[e],s=t&&t.endsWith("-");return s&&(n[e]=t.substr(0,t.length-1)),s}function i(e,t,n){if(e.endsWith("&")&&(e=e.substr(0,e.length-1)),t){if(!e.endsWith("*"))return null;e=e.substr(0,e.length-1)}return n[e]}util.log("cpp","findObjectAndClassMembers",n,s);let r=o(0),a=n[0].toLowerCase(),c=util.findLast(t.items,e=>e.n&&a==e.n.toLowerCase());if(!c)return null;util.log("cpp","in userCode:",c);let l=function(e,n){for(const s of t.usingNamespaces){const t=i((s?s+"::":"")+e,r,n);if(t)return t}return null}(c.type,this.apiInfo);for(let e=1;e<n.length;e++){if(!l)return null;r=o(0);let t=n[e].toLowerCase();if(c=util.find(l,e=>e.n&&t==e.n.toLowerCase()),!c)return null;util.log("cpp","in api:",c);let s=c.type;if(s.endsWith("[]")){const t=n[e+1];t&&(t.endsWith("]")||t.endsWith("]-"))&&(++e,s=s.substr(0,s.length-"[]".length),r=t.endsWith("]-"))}l=i(s,r,this.apiInfo)}return l?{objNames:n,memberName:s,object:c,classMembers:l}:null}findStaticItems(e,t){let n=[];const s=e.split("::"),o=s.pop();for(const e of t.usingNamespaces){let t=this._staticApiInfo;if(!e||(t=this._staticApiInfo.namespaces[e],t)){for(const e of s)if(t=t.namespaces[e.toLowerCase()],!t)break;t&&(n=n.concat(t.items))}}return{nsNames:s,itemName:o,items:n}}initStaticApiInfo(){const e=performance.now();this._staticApiInfo={items:[],namespaces:{}};for(const e of this.apiInfo[""]){const t=e.n.split("::");t.pop();let n=this._staticApiInfo;for(const e of t){const t=e.toLowerCase();n.namespaces[t]||(n.namespaces[t]={items:[],namespaces:{}}),n=n.namespaces[t]}n.items.push(e)}const t=performance.now()-e;util.log("cpp","initStaticApiInfo time (ms)",t)}}e.CppCode=t;class n{constructor(e){this._codeModel=e,this.RE_SHOW=/^[_a-zA-Z0-9.:>]$/,this.RE_PARENT=/((([a-zA-Z_][a-zA-Z0-9_]*)(\[.+\])?(\.|->|::|:|-))+)$/}findCompletions(e,s,i){let r;util.log("cpp","findCompletions",e,s,i);try{r=this._codeModel.parseUserCodeGetRelevantItems(s,i)}catch(e){return e!==o&&console.error(e.message||e),[autocomplete.AC_EXCLUSIVE]}if(e.startsWith("-")&&!(e=e.substr(1)))return[autocomplete.AC_EXCLUSIVE];const a=[];return n.processMatchingItems(e,r.items,(e,t)=>{const s=new autocomplete.AceCompletion(e.n,"*"+n.getMeta(e.kind),e.n);s.score=0===t?170:120,a.push(s)}),t.isObjectMemberExpression(e)?this.addObjectMemberCompletions(e,r,a):this.addStaticCompletions(e,r,a),a.push(autocomplete.AC_EXCLUSIVE),a}addObjectMemberCompletions(e,t,s){const o=/-$/.test(e)?">":"";e+=o;const i=this._codeModel.findObjectAndClassMembers(e,t);i&&n.processMatchingItems(i.memberName,i.classMembers,(e,t)=>{const r=i.object?i.object.type:"",a=new autocomplete.AceCompletion(o+e.n,n.getMeta(e.kind,!0),r+"."+e.n);a.score=0===t?150:100,s.push(a)})}addStaticCompletions(e,t,s){const o=/[^:]:$/.test(e)?":":"",i=(e+=o).toLowerCase(),r=this._codeModel.findStaticItems(e,t);r&&n.processMatchingItems(i,r.items,(e,t)=>{const i=e.n.split("::").pop(),r=n.getMeta(e.kind),a=new autocomplete.AceCompletion(o+i,r,e.n);a.score=0===t?150:100,s.push(a)})}static getMeta(e,t=!1){return(t?msg.E_KINDTYPE_OBJ[e]:msg.E_KINDTYPE[e])||"["+e+"]"}
1static processMatchingItems(e,t,n){const s=e.toLowerCase();for(const e of t){if(!e.n)continue;const t=e.n.toLowerCase().indexOf(s);-1!==t&&n(e,t)}}}e.CppAutocomplete=n;class s{constructor(e){this._codeModel=e,this.RE_MEMBER_ACCESS=new RegExp("(([_a-zA-Z][_a-zA-Z0-9]*(\\.|->|::))*[_a-zA-Z][_a-zA-Z0-9]*)$")}createMemberInfos(){this._memberApiInfos={};for(const e in this._codeModel.apiInfo){const t=this._codeModel.apiInfo[e];for(const n of t){const t=(e?e+".":"")+n.n;util.pushToValueList(this._memberApiInfos,t,n)}}}getMemberInfos(e){return null==this._memberApiInfos&&this.createMemberInfos(),util.log("cpp_help","getMemberInfos",e,this._memberApiInfos[e]),this._memberApiInfos[e]}getFunctionApiInfos(e){let n,s;util.log("cpp_help","getApiInfo",e);try{n=this._codeModel.parseUserCodeGetRelevantItems(e.row,e.column)}catch(e){return e!==o&&console.error(e.message||e),null}let i="";if(t.isObjectMemberExpression(e.fullMemberName)){const t=this._codeModel.findObjectAndClassMembers(e.fullMemberName,n);s=t?t.classMembers:null,i=t?t.memberName:null}else{const t=this._codeModel.findStaticItems(e.fullMemberName,n);s=t?t.items:null,i=e.fullMemberName}if(s){const e=util.grep(s,e=>e.n==i);return util.log("cpp_help","for",i,"matches",e),e}return null}getCompletionItemTooltip(e){let t=[],n=[];for(const o of e)switch(o.kind){case"function":t.push(s.getFunctionDefinitionHtml(o)),n.push(autocomplete.inline_help.getFunctionDescriptionHtml(o.doc));break;default:n.push(o.doc)}if(t.length>0&&t.length===n.length)for(let e=0;e<n.length;e++)n[e]==n[e+1]&&(n[e]=""),n[e]=(t[e]||"")+(t[e]&&n[e]?"<br>":"")+(n[e]||"");return 1==n.length?{html:n[0]}:{html:`${e.length} ${msg.OVERLOADS_C}<br>${n.join("<br>")}`}}static getFunctionDefinitionHtml(e,t){let n="<span class='functionDef'>";if(n+=`<span class='functionName'><span class='valueType'>${e.type||"void"}</span> ${e.n}</span>(`,e.params)for(let s=0;s<e.params.length;s++){0!==s&&(n+=", ");const o=s===t?"current":"",i=e.params[s];n+=`<span class='argName ${o}'><span class='valueType'>${i.type}</span> ${i.n}</span>`}return n+=")</span>",n}getFunctionParamTooltip(e,t){let n="";const o=[];let i=0;for(const t of e){const e=t.params?t.params.length:0;e>i&&(i=e)}for(const r of e){n||(n=autocomplete.inline_help.getFunctionDescriptionHtml(r.doc));const e=r.params?r.params.length:0;if(t<e||0==t&&0==e||e==i){let e=s.getFunctionDefinitionHtml(r,t);const n=autocomplete.inline_help.getParamDescriptionHtml(r.doc,t);n&&(e+="<br>"+n),o.push(e)}}return{html:(n?n+"<br>":"")+o.join("<br>")}}}const o="Cursor in comment";e.debugCodeItemsToString=function e(t,n=!0,s=!0,o=""){let i="";for(const r of t){if(i+=o,i+=r.n?`n:${r.n} `:"",i+=`kind:${r.kind} `,i+=r.type?`type:${r.type} `:"",s){const e=r.loc;i+=e?`(${e.start.line},${e.start.column})-(${e.end.line},${e.end.column}) `:""}i+=r.params?`\n${o}- params:${JSON.stringify(r.params)} `:"",n&&(i+=r.code?`\n${o}- code:\n${e(r.code,n,s,o+" ")}`:""),i+="\n"}return i}}(prog_language_cpp||(prog_language_cpp={}));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.