演示Eclipse插件实现代码提示和补全
续上文重拾《 两周自制脚本语言 》- Eclipse插件实现语法高亮, 但仅达到了演示Eclipse本身功能的程度, 与石头语言并无直接联系. 源码库相同, 仍在同一插件. 演示效果如下:
悬浮窗显示的是当前所在行内容. 而键入"新"字会弹出自动补全, 选项仅有"新建"一项. 再进一步的话, 两者都应该需要准确获取鼠标所在位置字段的语法信息, 即集成语法分析器的功能, 而那还只是第一步.
由于仅作演示功能, 相关代码还较简短. 内容辅助处理器, 提供自动补全功能.
public static final String[] 所有建议 = new String[] {"新建"}; @Override public ICompletionProposal[] computeCompletionProposals(ITextViewer 视图, int 偏移) { IDocument 文件 = 视图.getDocument(); try { int 偏移所在行 = 文件.getLineOfOffset(偏移); int 行头偏移 = 文件.getLineOffset(偏移所在行); int 当前行文本长度 = 偏移 - 行头偏移; String 当前行文本 = 文件.get(行头偏移, 当前行文本长度).toLowerCase(); return Arrays.asList(所有建议).stream() .filter(建议 -> !视图.getDocument().get().contains(建议) && 建议.toLowerCase().startsWith(当前行文本)) .map(建议 -> new CompletionProposal(建议, 行头偏移, 当前行文本长度, 建议.length())) .toArray(ICompletionProposal[]::new); } catch (BadLocationException e) { e.printStackTrace(); } return new ICompletionProposal[0]; } @Override public char[] getCompletionProposalAutoActivationCharacters() { String keys = "新"; return keys.toCharArray(); }
@Override public String getHoverInfo(ITextViewer 文本视图, IRegion 悬浮位置) { int 偏移 = 悬浮位置.getOffset(); IDocument 文件 = 文本视图.getDocument(); try { // 仅提取当前所在行, 如要取得当前鼠标所在词, 需进一步词法分析? int 所在行 = 文件.getLineOfOffset(偏移); IRegion 行信息 = 文件.getLineInformation(所在行); int 行长 = 行信息.getLength(); int 行偏移 = 行信息.getOffset(); return 文件.get(行偏移, 行长); } catch (BadLocationException e) { e.printStackTrace(); } return ""; }
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
突破Java面试(27)-如何保证缓存与数据库的数据一致性
1 面试题 如何保证缓存与数据库的双写一致性? 2 考点分析 你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题? 3 详解 一般来说,就是如果你的系统不是严格要求缓存+数据库必须一致性的话,缓存可以稍微的跟数据库偶尔有不一致的情况,最好不要做这个方案 读请求和写请求串行化,串到一个内存队列里去,这样就可以保证一定不会出现不一致的情况 串行化之后,就会导致系统的吞吐量会大幅度的降低,用比正常情况下多几倍的机器去支撑线上的一个请求。 3.1 Cache Aside Pattern缓存+数据库读写模式的分析 最经典的缓存+数据库读写的模式 cache aside pattern 3.1.1 Cache Aside Pattern (1)读的时候,先读缓存,缓存没有的话,就读数据库,然后取出
- 下一篇
Linux服务器---论坛discuz
Discus Discuz是一款免费的论坛管理系统,大量的使用了AJAX,内部有丰富的模板风格。 1、下载discuz软件(https://cn.wordpress.org/download/releases/") 2、为discuz创建一个自己的数据库,我们起名为“discuz” 3、将discuz安装包解压,将其中的upload目录拷贝到apache的网页根目录“/var/www/html/” [root@localhosthtml]# tar–xvfdiscus-3.1.tar//解压 [root@localhosthtml]# cp-rdiscus-3.1/upload/discus///重命令,这样方便从浏览器打开 4、修改discuz中config和data两个目录的权限为777,将config中的两个配置文件复制一份,名字去掉default [root@localhosthtml]# chmod-R777discuz/data/ [root@localhosthtml]# chmod-R777discuz/config [root@localhosthtml]# cddi...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7设置SWAP分区,小内存服务器的救世主