Procházet zdrojové kódy

feat(tab): 实现自动的自动补全

dzp před 3 roky
rodič
revize
0f6e92898b
2 změnil soubory, kde provedl 30 přidání a 0 odebrání
  1. 3 0
      framework/main.tin
  2. 27 0
      plugins/lib/tab-completion.tin

+ 3 - 0
framework/main.tin

@@ -92,6 +92,9 @@
     #nop 为 TinTin 赋能,自行实现的扩展语法和实用函数集。;
     load-lib xtintin;
 
+    #nop 提供 TinTin++ 命令行自动补全功能。;
+    load-lib tab-completion;
+
     #nop 默认的用户环境配置;
     load-file ids/DEFAULT;
 };

+ 27 - 0
plugins/lib/tab-completion.tin

@@ -0,0 +1,27 @@
+#event {READ FILE} {
+    refresh-tab-completion;
+};
+
+#alias {refresh-tab-completion} {
+    #info {ALIASES} save;
+    #local idx {};
+    #foreach {*info[ALIASES][]} {idx} {
+        #local name {$info[ALIASES][$idx][arg1]};
+        #nop 只有名字规整的 alias 才给加自动补全。;
+        #if { "$name" == "%*{[^a-zA-Z0-9.-]}%*" } {
+            #continue;
+        };
+
+        #nop 名字是大骆驼风格命名的,可以加自动补全。;
+        #if { "$name" == "{[A-Z][a-zA-Z0-9]*}" } {
+            #tab {$name};
+            #continue;
+        };
+
+        #nop 如果名字由小数点分成多个部分,那么只有最后一部分是大写字母开头的,才加自动补全。;
+        #if { "$name" == "%*.{[A-Z][A-Za-z0-9]*}" } {
+            #tab {$name};
+            #continue;
+        };
+    };
+};