本周在github上发布了第一个版本的Scripted代码编辑器:https://github.com/scripted-editor/scripted。
虽然Scripted是一个通用的代码编辑器,但最初的重点是构建出色的JavaScript编辑体验。Scripted本身完全使用JavaScript和HTML/CSS构建。它是一个基于浏览器的编辑器,可在开发人员的本地机器上运行,并使用Node.js实例来服务编辑器代码并执行编辑器操作。运行Scripted的唯一先决条件是您安装了最新版本的Node.js(我们目前正在使用Node 0.8.11进行测试)。Scripted重用了Eclipse Orion的编辑器组件。
Scripted实战
为什么要创建Scripted?
Scripted是某些内部原型设计和调查性工作的结果,这些工作探索了未来工具的不同策略。探索这一领域的主要因素实际上有两个方面。
首先,我们看到许多用户选择不使用IDE,而是选择使用更简单的轻量级编辑器(vim、Sublime、textmate)。开发人员通常会有一套他们非常熟悉的工具来完成常见任务(例如命令行git),并且他们不需要学习如何通过其他用户界面来使用这些工具。这些开发人员希望工具能够几乎立即启动,并在运行过程中继续保持极高的响应速度。但是,目前,当选择放弃IDE时,他们似乎也放弃了他们已经习惯的益处,例如出色的代码提示、快速导航和早期错误指示。Scripted提供了一种轻量级且快速的工具,同时也支持开发人员无法离开的关键IDE功能——例如代码提示和对常见模块系统的理解。这些是Scripted的关键重点。
其次,我们看到云IDE和云工作区的普及程度越来越高。开发人员连接到某些远程系统来完成他们的开发工作,并且这些工具(例如Cloud9 IDE和eXo Cloud IDE)通常提供基于浏览器的编辑体验。用户的workspace位于远程系统上。这种设置对于某些团队来说可能效果很好,但在我们的经验中,我们发现仍然需要离线开发模式,因为开发人员并非始终都能连接到互联网,而且也很难让他们放弃“完全控制”并将文件托管在远程服务器上。通过遵循基于浏览器的编辑模型并在本地托管服务器,Scripted提供了一种能够满足开发人员当前需求的东西,但也能够通过简单地远程部署服务器来实现将来使用云工作区。
从根本上说,我们觉得许多现有的JavaScript工具在某些关键领域都存在不足,鉴于我们在语言工具方面的背景,我们想看看我们能否构建一个轻量级的工具来满足这些需求。
专注于JavaScript
JavaScript的受欢迎程度持续提高。它不再仅仅用于客户端编程,Node.js等框架使其能够用于完整的端到端解决方案。这就是为什么我们将JavaScript作为Scripted的首要任务的原因。当然,我们也对相关的语言感兴趣(例如CoffeeScript、最近发布的TypeScript),但目前,共同点是JavaScript。我们希望为一种语言构建出色的体验,而不是为多种语言构建不太好的体验。
功能集
- 快速启动,轻量级。
- 对JavaScript、HTML和CSS的语法高亮显示。
- 错误和警告
- 集成了JSLint,以在JavaScript代码上提供错误/警告标记。
- AMD和CommonJS模块解析:存在基本解析,其中未解析的引用将被标记为错误。
- 代码提示
- HTML、CSS的基本代码提示
- 对于JavaScript,代码提示由类型推断引擎驱动,该引擎了解AMD/CommonJS模块依赖项,并使用JSDoc注释来帮助它理解代码。
- 悬停:将鼠标悬停在JavaScript标识符上将显示推断的类型签名。
- 导航:按F8键选择一个标识符(推断器已识别),编辑器将导航到声明。这也适用于模块标识符(例如,在define()子句中)。
- 格式化:集成了JSbeautify
- 侧边栏:可以在主编辑器旁边打开侧边栏——目前,这可以用来托管第二个编辑器。
- 外部命令的键绑定:编辑器中的键绑定可以调用外部命令(less、mvn等)。
在
wiki文档中可以找到有关这些功能的更多详细信息。
使用Scripted开发Scripted
Scripted 100% 使用JavaScript、HTML和CSS编写。因此,它是一个完美的代码库,可用于使用Scripted编辑器。对于我们的其他工具项目,我们通常不会在日常工作中使用这些工具;相反,我们开发它们供其他人使用。在VMware,我们使用Scripted来开发Scripted——没有什么比开发人员自己不断遇到bug更能更快地修复bug了!
Scripted入门
github主页包含一个入门视频:
但基本步骤如下:
- 确保已安装node
- 从此处获取最新的打包版本 (0.2.0):scripted_v0.2.0.zip
- 解压它
- 确保bin文件夹中的脚本是可执行的(如果在linux/mac上),使用chmod 755 bin/*
- 将bin文件夹添加到您的路径
Mac/Linuxexport PATH=/bin:$PATH
Win
set PATH=\bin;%PATH%
- 开始使用它,像启动'vi'一样用'scr'或'scripted'启动它。
scr foo.js
Scripted会在启动时尝试推断您的项目根目录。它通过搜索一个接近的
.git或
.project层次结构中的文件。如果您没有,它将在单文件模式下工作。要告诉Scripted根目录在哪里,您可以创建一个简单的(空的)
.scripted根目录下的文件。Scripted需要知道根目录,因为当然,某些操作(如代码提示、依赖项解析、搜索)是在项目的上下文中发生的。
技术
如前所述,服务器端技术是Node.js,但它实际上是很小量的服务器代码。支持推断引擎的是我们为分析模块依赖项而编写的某些服务器端JS。
在客户端,我们不想为编辑器技术重新发明轮子,因此选择使用Eclipse Orion的编辑器。这提供了很好的快速编辑体验,对于任何使用过“完整eclipse”中编辑器的人来说都非常熟悉——它共享许多相同的行为和键绑定。如果可能,我们在代码提示等功能上所做的工作将贡献回Orion项目。任何需要解析的JavaScript都将通过我们可恢复的Esprima解析器派生版本传递。当开发人员正在积极编辑文件时,代码通常处于未完成状态,因此即使存在错误也能返回良好AST的可恢复解析器非常重要。
接下来是什么?
我们目前处于早期阶段(版本0.2.0),我们未来的计划包括:
- 更智能的推断,从而实现更好的代码提示和更轻松的导航。
- 侧边栏的更多窗格。目前只有一个编辑器窗格,但我们打算包含搜索结果窗格、文档、git信息窗格,也许还有代码预览和模拟代码执行窗格。目的是让Scripted尽可能自动管理这些内容,以便屏幕上的所有内容都与手头的任务相关。
- 简单的插件系统。
- 调试。探索与Chrome Dev Tools和node inspector等工具的集成。
我们决定尽早开源以获得反馈。如果您想帮助我们塑造编辑器,请加入讨论。有一个scripted-dev谷歌群组用于讨论它,以及一个jira问题跟踪器用于记录错误、增强请求和对现有问题的投票,以确保它们得到适当的优先级排序。如果您想自己开始修改代码库,我们绝对欢迎提交——请参阅github页面以获取更多信息。
请尝试一下!https://github.com/scripted-editor/scripted