1.2.8 • Published 2 years ago

coc-lpcd v1.2.8

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

coc-lpcd

解析lpc(语法定义)引擎生成的符号表,提供符号跳转和自动补全的功能。

安装

:CocInstall coc-lpcd

依赖

需要提供一个编译程序lpc_complie,coc-lpcd使用lpc_complie cmd/command.c,在lpc脚本的根目录project,将指定的lpc文件编译。在project/log/symbol/下生成符号文件,命名为cmd#command.c,将/替换为#。

符号文件的格式为

File:
    : Lines
Lines
    : Line
    | Line Newline Lines
Line:
    : Op ' ' Filename ' ' Lineno ' ' Detail
    ;
Newline
    : '\n'
    ;
Op
    : '1'
    | '2'
    | '3'
    | '4' 
    | '5'
    | '6'
    | '7'
Filename
    : [a-zA-Z0-9_/.]+
Lineno
    : [0-9]+
Detail
    : .*?

符号文件由多行组成,每一行是一个操作,每个操作可能是

操作解释内容detail钩子位置
1include文件可以空缺handle_include
2define宏define内容handle_define
3定义全局变量变量名define_new_variable
4函数定义函数名define_new_function
5定义局部变量变量名add_local_name
6取消局部变量定义取消个数pop_n_locals
7取消所有的局部变量定义free_all_local_names

文件名和行号来自于yacc解析过程中的current_filecurrent_line

配置

{
    "coc-lpcd.efunc": [
        "/etc/efun_define.c",
        "/sys/object/simul_efun.c"
    ],
    "coc-lpcd.include": "inc",
    "coc-lpcd.workspace": "newtxii",
    "coc-lpcd.complie": "lpc_complie"
}
  1. coc-lpcd.efunc: 这里面定义的函数,任何一个脚本都能访问。
  2. coc-lpcd.include: #include 查找的目录。
  3. coc-lpcd.workspace: 确定根目录project的目录名。
  4. coc-lpcd.complie: 生成符号文件的命令。

代码细节

代码核心部分是个parse函数,传入指定的文件,对编译之后的符号文件进行解析生成FileSymbol

interface FileSymbol {
    lineno: number;
    defined: Symbol[],
    include: Symbol[],
    variable: Symbol[],
    func: Symbol[],
    childFileSymbol: { [key: string]: FileSymbol },
}

interface Symbol {
    name: string,
    line: number,
    filename: string,
    args?: string[],
    op?: LineSymbol[],
    detail?: string,
}

一个文件符号表用FileSymbol,里面包括该文件定义的宏、全局变量、函数。childFileSymbol用于存放include文件的符号表。lineno是include的行数,用于筛选符号定义之前的代码提示。

每一个符号用Symbol表示,可以是宏定义、函数名、全局变量名。包括符号名、定义的行号、定义的文件名、符号携带的参数(只有宏和函数有)和具体内容(宏内容)。

函数定义之前会先定义局部函数变量,开始函数定义的时候,取出所有的局部变量,就是函数变量。

取消局部变量定义的时候,根据数量,从栈里面弹出即可。

释放所有局部变量的时候,清空局部变量栈。

记录最后一个定义的函数符号,将和局部变量的相关的操作全部加入到队列中,在释放所有局部变量的时候,将队列挂到符号的op中。在进行局部变量名提示的时候,根据当前行号找到函数符号,回放队列中的操作,直到当前行,此时队列中剩余的局部变量,就是可以访问的局部变量名。

This extension is built with create-coc-extension

1.1.1

2 years ago

1.1.0

2 years ago

1.2.8

2 years ago

1.2.7

2 years ago

1.2.6

2 years ago

1.2.5

2 years ago

1.2.4

2 years ago

1.2.3

2 years ago

1.2.2

2 years ago

1.1.2

2 years ago

1.0.0

2 years ago

0.0.34

3 years ago

0.0.35

3 years ago

0.0.33

3 years ago

0.0.32

3 years ago

0.0.31

3 years ago

0.0.30

3 years ago

0.0.29

3 years ago

0.0.28

3 years ago

0.0.27

3 years ago

0.0.25

3 years ago

0.0.26

3 years ago

0.0.24

3 years ago

0.0.22

3 years ago

0.0.23

3 years ago

0.0.21

3 years ago

0.0.20

3 years ago

0.0.18

3 years ago

0.0.19

3 years ago

0.0.13

3 years ago

0.0.14

3 years ago

0.0.15

3 years ago

0.0.16

3 years ago

0.0.17

3 years ago

0.0.10

3 years ago

0.0.11

3 years ago

0.0.12

3 years ago

0.0.9

3 years ago

0.0.8

3 years ago

0.0.7

3 years ago

0.0.6

3 years ago

0.0.3

3 years ago

0.0.5

3 years ago

0.0.4

3 years ago

0.0.2

3 years ago

0.0.1

3 years ago