-
Notifications
You must be signed in to change notification settings - Fork 17
代码补全要求
Qingtian edited this page Mar 1, 2019
·
11 revisions
插件基于对Red源代码进行语义分析,需提供较VSCode原始补全功能更有用的信息。目前只需完成对context(包括object)和function(包括func,does)的静态分析。
Red程序由Red Value组成,而所有Red Value默认都在一个隐含的全局context里。因此,所有的补全都发生在某一个context内。此类补全需收集context内的set-word作为候选词,当context重复定义时,以最后一次定义的context为准。如context有嵌套,在子context内补全时应同时显示其所有上层context中的候选词。同时,Red Runtime内已经定义的word也需要出现在候选词列表里。
- 例子1,基本情况
Red []
abc123: "hello"
abc321: 2
ab -> 输入ab,需提示候选词 abc123, abc321, about 和 absolute。注意最后两个是Red Runtime预定义的。
- 例子2,word重复定义
Red []
abc123: 2
abc123: context [
xx: 123
]
abc123: context [
abc: none
bcd: 2
]
ab -> 输入ab,需提示候选词 abc123, about 和 absolute。
abc123/ -> 输入abc123/,需提示候选词 abc 和 bcd。
- 例子3,context内提示
Red []
xxx: 1
abc123: 2
abc123: context [
abc: none
bcd: 2
]
abc321: context [
abc222:"haha"
ab -> 此处输入ab,需提示候选词 abc222, abc123, abc321, about 和 absolute。
(最近的word显示最靠前,因此abc222显示在第一个)
abc123/ -> 此处输入abc123/,需提示候选词 abc 和 bcd。
]
- 例子4,多层嵌套context
Red []
abc123: 2
abc123: context [
abc: none
bcd: 2
]
abc321: context [
xyz: 999
abc222:"haha"
bcd: context [
xxx: 2
abc333: "cool"
ab -> 此处输入ab,需提示候选词abc333, abc222, abc123, abc321, about 和 absolute。
(最近的word显示最靠前,因此abc333显示在第一个)
abc123/ -> 此处输入abc123/,需提示候选词 abc 和 bcd。
abc321/ -> 此处输入abc321/,需提示候选词 xyz, abc222 和 bcd。
]
ab -> 此处输入ab,需提示候选词 abc222, abc123, abc321, about 和 absolute。
(最近的word显示最靠前,因此abc222显示在第一个)
abc123/ -> 此处输入abc123/,需提示候选词 abc 和 bcd。
]
abc321/bcd/ -> 输入abc123/bcd/,需提示候选词 xxx, abc333.
- 例子5,合并context
Red []
abc: context [
abc111: 1
]
abc123: make abc [ ;-- 合并abc context
abc222: 2
bcd: 2
]
abc321/ -> 输入abc321/,需提示候选词 abc111, abc222 和 bcd。
每个函数也有个context,需要提示该context内定义的word。此类补全需对函数进行分析。
- 例子1
Red []
abc: context [
xxx: 1
]
bbb: context [
test1: function [][
abc12: 1
abc33: 2
ab -> 此处输入ab,提示候选词 abc12, abc33, abc, about 和 absolute。
]
test2: func [/abc999 /local abc12 abc33][
ab -> 此处输入ab,提示候选词 abc999, abc12, abc33, abc, about 和 absolute。
(提示定义的本地变量,哪怕不是set-word。refinement也要提示)
]
]
- 例子2, 补全function的refinement。
Red []
abc123: func [/cool /great /smile /local a b][...]
abc321/ -> 输入abc321/,需提示候选词 cool, great 和 smile.
append/ -> 输入append/,提示候选词 dup, only, part。(对预定义的函数同样需要补全)
Red []
%/d/ -> 输入文件路径,需提示该路径下的文件。