[源码分享]自动生成提示文件 更新(支持 namespace.function 和class)

蓝羽 2023-8-3 1034

帖子说明:

功能比较简陋,是自用的功能

代码不规范,本人对arrdio的文档阅读也不全面,东拼西凑出来的东西,想集成到ide里面也不会,本人也不太会写文档凑合看吧

主要是抛砖引玉,希望大佬们能完善


正文

需求来源:

发现自己的库都不能提示,然后翻看文档发现提示是需要手动配置的,感觉比较繁琐,java直接在函数上方写注释接可以了,然后此代码就孕育而生了


作用:

为自己写的库生成提示文件

使用方式:

将当前文件放进项目的lib直接按f5执行

特殊说明:

在template里面的增加了mm的提示,生成对函数的自定义注解,可以解析到声明文件中



namespace template{

}
import fsys;

function printDeclare(path){
declare = io.open (".\lib\declare.aardio","a+")
var $str = string.load(path)
var method="";

for $line in string.lines($str) {
if(string.indexOf($line,"namespace")){
var spacename=string.trim(string.replace(string.replace($line,"@namespace",""),"{",""))
declare.write("/*intellisense("+spacename+".)"+'\r');
}elseif(string.indexOf($line,"@@desc")){
var desc=string.trim(string.replace(string.replace($line,"@@@@desc",""),"{",""))
method=method+desc;
}
elseif(string.indexOf($line,"function")){
var fun=string.trim(string.replace(string.replace($line,"@function",""),"{",""))
method=fun+" = " +method;
declare.write(method+'\r');
method="";
}
}
declare.write("end intellisense*/"+'\r');
declare.close();
}

declare = io.open (".\lib\declare.aardio","w+")
declare.write("");
declare.close();
fsys.enum(  ".\lib",  //当前目录
            "*.aardio", //所有 aardio文件
            function(dir,file,fullpath,findData){  
                if(file){
                    if(file!="declare.aardio"&&file!="template.aardio"){
                    printDeclare(fullpath);
                    }
                }
            }
          );

/*intellisense()
mm = @/**\n@@desc __ \n**/
end intellisense*/



自定义注解使用方式:

1.以上代码创建template.aardio文件,并复制内容,然后刷新智能提示

2.在函数上方敲mm然后回车

函数上方会就变成这样

我们可以在此处键入函数和参数的说明


3然后保存文件,切换到template文件中按f5

4然后刷新lib目录就会多出一个declare.aardio文件,这就是声明文件,包含了所有的lib库的声明

这是刚才那个函数的声明

我们来尝试一下

至此介绍完毕


2023年8月9日 更新

更新内容 

1 规范提示词,annc 类注解,annf 函数注解,同之前的mm(保留mm,向前兼容)

2 原来仅支持namespace.function ,现在新增了对类对象的提示支持,支持类注解

这是在类中使用的示例


这里是更新之后的代码

namespace template{
	
}
import fsys;
import console;
function printDeclare(path){
	declare = io.open (".\lib\declare.aardio","a+")	
	var $str = string.load(path)
	var method="";
	var isClazz=false;
	var clazz="";
	var clazzDesc="";
	for $line in string.lines($str) {
		if(string.indexOf($line,"class")){
			isClazz=true;
			clazz=string.replace(string.replace($line,"@class",""),"{","")
			declare.write("/*intellisense()"+'\r');
		}
		elseif(string.indexOf($line,"namespace")){
			var spacename=string.replace(string.replace($line,"@namespace",""),"{","")
			declare.write("/*intellisense("+spacename+".)"+'\r');
		}elseif(string.indexOf($line,"@@_desc_clazz")){
			console.log($line)
			clazzDesc=string.trim(string.replace(string.replace($line,"@@@@_desc_clazz",""),"{",""))+"\n"
			console.log(clazzDesc)
		}elseif(string.indexOf($line,"@@desc")){
			var desc=string.trim(string.replace(string.replace($line,"@@@@desc",""),"{",""))
			method=method+desc;
		}
		elseif(string.indexOf($line,"@@_desc_func")){
			var desc=string.trim(string.replace(string.replace($line,"@@@@_desc_func",""),"{",""))
			method=method+desc;
		}
		elseif(string.indexOf($line,"function")){
			var fun=string.replace(string.replace($line,"@function",""),"{","")
			fun=string.replace(fun,"\s","",10);
			if(isClazz){
				fun=string.replace(fun,"@=","",10);
			}
			
			method=fun+" = " +string.replace(method,"\s","",10);
			
			if(isClazz){
				method="!tmp."+method;
			}
			declare.write(method+'\r');
			method="";
		}
	}
	if(isClazz){
		clazzDesc=string.replace(clazzDesc,"\s","",10);
		declare.write(clazz+"() = "+clazzDesc+"!tmp."+'\r');
	}
	declare.write("end intellisense*/"+'\r');
	declare.close();
}

declare = io.open (".\lib\declare.aardio","w+")
declare.write("");
declare.close();


fsys.enum(  ".\lib",  //当前项目的lib目录
            "*.aardio", //所有 aardio 文件
            function(dir,file,fullpath,findData){  
                if(file){
                    //排除掉declare和template 文件,declare为声明文件,template为当前文件
                    if(file!="declare.aardio"&&file!="template.aardio"){
                    	printDeclare(fullpath);
                    }
                }
            }
          );
//console.log('声明文件已生成:declare.aardio,请刷新用户库查看')     
console.logPause();


/*intellisense()
annf = @/**\n@@_desc_func __ \n**/
mm = @/**\n@@desc __ \n**/
annc = @/**\n@@_desc_clazz __ \n**/
end intellisense*/


源码文件放在下面了

下面的是最新的

上传的附件:
最新回复 (4)
  • 光庆 2023-8-3
    0 2

    顶起

  • lcj21 2023-8-4
    0 3
    学习一下,感谢分享!
  • Viewer8122 2023-8-4
    0 4

    这个好,方便多了!

  • lerh 2023-8-4
    0 5
    厉害
返回