overview icon indicating copy to clipboard operation
overview copied to clipboard

考虑从LSP入手,提供美式键盘补全汉字标识符的能力(提供本地化自动补全字符串)

Open Akarinnnnn opened this issue 8 months ago • 3 comments

既然从头设计一门语言有困难,那么从修改VSCode等编辑器支持的LSP入手,允许美式键盘输入拼音缩写之后,自动补全关联到对应的汉字标识符是否更有可行性?

以下是示例:

首先是代码:


// Pronounces as "Zhong Wen Biao Shi Fu", for demonstration purposes take invalid pronunciation "Zhong Wen Biao Zhi Fu" into consider
// All pronunciations above are stripped tones
class 中文标识符 { /* ... */ }

class ZhongWenPinYin { 
  // 罕见字或罕见读音,用户覆盖读法
  // multilingual-autocompletion-override-completion: WuXuan
  public static string 吴烜 = "WuXuan";
}

修改后的LSP给class 中文标识符对应的语法项增加一个属性:localizedCompletionString: [ 'ZhongWenBiaoShiFu', 'ZhongWenBiaoZhiFu' ]。稍后用户在键盘上输入缩写zhongwenbs时,编辑器的自动补全功能弹出类似列表:

zhongwenbs
(⭐) 中文标识符
ZhongWenPinYin
...

通过这种方式可以解决输入中文标识符时,处于中文输入状态无法触发补全的问题。预计解决这个问题对提高编码效率有帮助。

本地化补全字符串中有一些细节:

  1. 单条补全字符串不是完全小写的。这是为了允许编辑器在收到zw的输入时,也能够通过猜测首字母大写ZhongWen进而关联到此标识符。
  2. 为了应对多音字,每个符号的补全字符串都是数组(列表),标识符每个可能的读音都放在里面。建议只放入常见读音。不常见的字符和读音由下述机制处理。
  3. 标识符前第一条去除了前导空格后,由multilingual-autocompletion-override-completion:起头的注释将指定localizedCompltionString的内容。如上述标识符吴烜,将被注释multilingual-autocompletion-override-completion: WuXuan冒号后的内容覆盖读音,localizedCompltionString的内容将是[ "WuXuan" ]。具体是否只允许一条读音待定。

希望这些想法对您的项目有所帮助。

Akarinnnnn avatar Apr 23 '25 09:04 Akarinnnnn

您好,您的邮件已收到,会尽快处理回复您!

xgongya avatar Apr 23 '25 09:04 xgongya

您好!非常感谢分享。 这个插件好像是通过executeCompletionItemProvider实现的补全。

nobodxbodon avatar Apr 23 '25 13:04 nobodxbodon

另外,一些国内自研语言:

  • https://gitee.com/MulanRevive/mulan-rework
  • https://github.com/ploc-org/CNPL

nobodxbodon avatar Apr 23 '25 14:04 nobodxbodon