基于ai的代码漏洞检测
救援时的深度学习。 在本文中,我将讨论TabNine ,这是一种适用于所有语言的AI代码完成系统,重点是JavaScript。
什么是TabNine?
TabNine帮助开发人员使用一些魔术来编写代码。 它基于深度学习系统,可帮助您编写代码:
- 快点
- 更轻松
- 清洁器
它是主要IDE的免费 (是, 免费 )插件,例如:
- IntelliJ
- 药香
- VS代码
- 升华
- IntelliJ
- 暴风雨
- VIM
- 原子
和许多其他:
它是如何工作的?
TabNine为您的代码建立索引并找到统计模式,以根据您自己编写代码的方式创建自定义建议。
请看以下示例:
![](https://firebasestorage.googleapis.com/v0/b/hackernoon-app.appspot.com/o/images%2FofRpXL2ckrMlvB1hN65HcdciMFC3-86p3u1l.gif?alt=media&token=e9d4fa81-b068-4cc4-b5e4-ddeab66638d0)
如图所示,TabNine在编写它时会自动学习我的变量声明模式,并建议我与我将要编写的代码最匹配。 这样,如果使用定义良好的命名约定,则可以加快变量声明的速度。
TabNine在编写时提供了不同的解决方案,并根据他找到的最佳匹配项显示一个百分比值:
![](https://firebasestorage.googleapis.com/v0/b/hackernoon-app.appspot.com/o/images%2FofRpXL2ckrMlvB1hN65HcdciMFC3-bef3fra.webp?alt=media&token=30511949-ee2f-4858-83be-cd3b72d8d8c0)
这是一个简单的示例,展示了TabNine如何帮助您编写代码,接下来的示例将展示此惊人工具的更复杂且类似于普通的用例!
注意:本文是用MarkDown编写的,TabNine正在帮助我编写它! 太酷了!
![]()
安装
TabNine是一个IDE插件,因此安装过程取决于您使用的IDE。 我将展示一些最常用的IDE的安装过程:
Visual Studio Code按CTRL + P打开命令提示符,运行以下命令:
ext install TabNine.tabnine-vscode
手动或通过安装后提示重新加载VS Code。 IntelliJ Idea按Ctrl + Alt + S打开设置弹出窗口在Plugins / Marketplace Search TabN下并安装手动重新加载IDE 您只需搜索并安装TabNine的 AtomUnder 软件包
您可以在此处检查其他IDE的安装过程。
例子
让我们深入了解如何使用TabNine以及为什么 。 我可以向您展示很多示例,但我将重点介绍一些特定的用例。
注释驱动的代码完成
使用TabNine,我们可以使用jsdoc来动态生成函数和复杂对象。 首先定义接口,然后定义实现,这可能会很有用。
以这个例子为例,我们要定义一个求和函数:
/**
* @description return a sum between a and b
* @name sumBy
* @param {number} a
* @param {number} b
* @return {number} the sum between a and b
*/
TabNine将阅读jsdoc参数,并建议您正确的代码定义。
我可以输入Alt +空格键(或Tab键)来编写函数:
![](https://firebasestorage.googleapis.com/v0/b/hackernoon-app.appspot.com/o/images%2FofRpXL2ckrMlvB1hN65HcdciMFC3-t41b3upr.gif?alt=media&token=71990101-8f95-4a37-b180-bc9a661172bb)
类的发展和扩展
您也可以将此工具与类定义一起使用。 举个例子:
/**
* @description Animal class
*/
class Animal {
/**
* @constructor
* @param {string} name - name of the animal
* @param {boolean} quadruped
*/
constructor (name, quadruped) {
this .name = name;
this .quadruped = quadruped;
}
/**
* @description returns the name of the animal
* @returns {string} - name of the animal
*/
get name() {
return this .name;
}
/**
* @description sets the name of the animal
* @param {string} name - name of the animal
*/
set name(name) {
this .name = name;
}
}
我们想用Cat类来扩展这个基本类,TabNine将学习Animal类并建议方法实现和注释:
![](https://firebasestorage.googleapis.com/v0/b/hackernoon-app.appspot.com/o/images%2FofRpXL2ckrMlvB1hN65HcdciMFC3-op1w3uz7.gif?alt=media&token=6fea9c29-03b9-4ac8-ad5a-b6adb51cc45c)
功能参数自动补全
通常,在Javascript中,不键入就很难完成函数参数。 TabNine在这种情况下很有用,因为它可以从您的代码中学习并建议方法实现:
![](https://firebasestorage.googleapis.com/v0/b/hackernoon-app.appspot.com/o/images%2FofRpXL2ckrMlvB1hN65HcdciMFC3-i7263uj5.gif?alt=media&token=92ae9fb9-523e-4010-9fb1-682edd4a25a6)
TabNine会自动显示方法sumBy和diffBy的参数,因此您不必直接检查方法实现即可检查方法接受的参数类型。
TabNine和打字稿
TabNine行为在JavaScript和TypeScript之间没有太多区别。 由于键入,TabNine将为您提供更精确的建议,因此将获得类型赋予您的代码的所有优点:
![](https://firebasestorage.googleapis.com/v0/b/hackernoon-app.appspot.com/o/images%2FofRpXL2ckrMlvB1hN65HcdciMFC3-6bk3u4q.webp?alt=media&token=82fa0258-c465-4d35-808a-a03e3923558b)
如您所见,与foo函数相比,我以不同的顺序和类型定义了param1 , param2和param3 。
TabNine正在识别变量类型并向您建议正确的顺序。
谢谢:
- Codota让我写这篇文章并成为他们的一个了不起的项目
- clideo.com ,一个很棒的在线视频编辑工具(您也可以用它制作模因mes)
- onlineconverter.com ,将视频转换为GIF等等!
翻译自: https://hackernoon.com/an-ai-based-code-completion-system-for-all-languages-a12g3y3y
基于ai的代码漏洞检测