syntaxTree

京东扫描平台EOS—JS扫描落地与实践

十年热恋 提交于 2021-02-03 12:04:20
"程序是写给人读的,只是偶尔让计算机执行一下。—— Donald Knuth" 引言 随着前端应用的大型化和复杂化,越来越多的前端工程师和团队开始重视 JavaScript 代码规范。得益于前端开源社区的繁盛,当下已经有几种较为成熟的 JavaScript 代码规范检查工具,包括 JSLint、JSHint、ESLint、FECS 等等。EOS-JS,它是一款插件化的JavaScript 代码静态检查工具,具备全套的热修复、增量更新方案,集各类代码规范检查工具优势于一体,其核心是通过对代码解析得到的 AST(Abstract Syntax Tree,抽象语法树)进行模式匹配,定位不符合约定规范的代码、给出修改意见并支持一键修复,在降低维护成本、提升执行效率的同时,也保障了代码规范的统一。 为实现规范编码、提高编码质量,目前较为通用的是直接使用开源生态中提供的一些标准方案,可以用较低成本来实现 JavaScript 代码规范的落地。如果再搭配一些辅助工具(例如 husky 和 lint-staged),整个流程会更加顺畅。但是对于大型企业开发团队而言,数十人甚至上千人面对数万个工程,规模化地应用统一的 JavaScript 代码规范,并且有效落地执行,问题就会变得较为复杂。 痛点分析 设计初期,我们收集了大量前端开发人员的编码痛点,可以归纳为以下几点: 人员角度 公司部门团队较多

JS抽象语法树AST基础学习

心不动则不痛 提交于 2020-12-24 22:14:21
点击上方“ 咸鱼学Python ”,选择“ 加为星标 ” 第一时间关注Python技术干货! 原文地址:http://www.goyth.com/2018/12/23/AST/ 相关内容推荐 JS 逆向高阶 | JS 逆向的噩梦 - AST 抽象语法树 为什么要了解AST 如果你想了解 js 编译执行的原理,那么你就得了解 AST,目前前端常用的一些插件或者工具,比如说javascript转译、代码压缩、css预处理器、elint、pretiier等功能的实现,都是建立在 AST 的基础之上。 JavaScript 编译执行流程 js执行的第一步是读取 js 文件中的字符流,然后通过词法分析生成token,之后再通过语法分析生成 AST(Abstract Syntax Tree),最后生成机器码执行。 词法分析 词法分析,也称之为扫描(scanner),简单来说就是调用 next() 方法,一个一个字母的来读取字符,然后与定义好的 JavaScript 关键字符做比较,生成对应的Token。Token 是一个不可分割的最小单元,例如 var 这三个字符,它只能作为一个整体,语义上不能再被分解,因此它是一个 Token。词法分析器里,每个关键字是一个 Token ,每个标识符是一个 Token,每个操作符是一个 Token,每个标点符号也都是一个 Token。除此之外

手把手教你撸一个简易的 webpack

你。 提交于 2020-11-22 06:36:19
背景 随着前端复杂度的不断提升,诞生出很多打包工具,比如最先的 grunt , gulp 。到后来的 webpack 和 Parcel 。但是目前很多脚手架工具,比如 vue-cli 已经帮我们集成了一些构建工具的使用。有的时候我们可能并不知道其内部的实现原理。其实了解这些工具的工作方式可以帮助我们更好理解和使用这些工具,也方便我们在项目开发中应用。 一些知识点 在我们开始造轮子前,我们需要对一些知识点做一些储备工作。 模块化知识 首先是模块的相关知识,主要的是 es6 modules 和 commonJS 模块化的规范。更详细的介绍可以参考这里 CommonJS、AMD/CMD、ES6 Modules 以及 webpack 原理浅析 。现在我们只需要了解: es6 modules 是一个编译时就会确定模块依赖关系的方式。 CommonJS 的模块规范中,Node 在对 JS 文件进行编译的过程中,会对文件中的内容进行头尾包装 ,在头部添加 (function (export, require, modules, __filename, __dirname){\n 在尾部添加了 \n}; 。这样我们在单个JS文件内部可以使用这些参数。 AST 基础知识 什么是抽象语法树? 在计算机科学中,抽象语法树(abstract syntax tree 或者缩写为 AST),或者语法树

Calcite研究

喜欢而已 提交于 2020-10-06 04:12:35
1. 背景 calcite作为一款开源的动态数据管理框架( https://calcite.apache.org/ ),它具备很多典型数据库管理系统的功能,比如SQL解析、SQL校验、SQL查询优化、SQL生成以及数据连接查询等,但是又省略了一些关键的功能,比如Calcite并不存储相关的元数据和基本数据,不完全包含相关处理数据的算法等。 也正是因为Calcite本身与数据存储和处理的逻辑无关,所以这让它成为与多个数据存储位置(数据源)和多种数据处理引擎之间进行调解的绝佳选择。 Calcite所做的工作就是将各种SQL语句解析成抽象语法树(AST Abstract Syntax Tree),并根据一定的规则或成本对AST的算法与关系进行优化,最后推给各个数据处理引擎进行执行。 Calcite整体架构如下图所示: Hive,Flink,Storm都使用Calcite作为其SQL解析优化引擎。 2. Calcite适配器 这里需要提到一个重要的概念:Schema adapters( https://calcite.apache.org/docs/adapter.html ) A schema adapter allows Calcite to read particular kind of data, presenting the data as tables within a

PHP7带来了哪些重要的变化

怎甘沉沦 提交于 2020-08-11 09:45:01
PHP7带来的新东西 1.类型的声明。 可以使用字符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool),来声明函数的参数类型与函数返回值。 declare(strict_types=1); function add(int $a, int $b): int { return $a+$b; } echo add(1, 2); echo add(1.5, 2.6); php5是无法执行上面代码的,php7执行的时候会先输出一个3和一个报错( Argument 1 passed to add() must be of the type integer, float given); 标量类型声明 有两种模式: 强制 (默认) 和 严格模式。 declare(strict_types=1),必须放在文件的第一行执行代码,当前文件有效! 2.set_exception_handler() 不再保证收到的一定是 Exception 对象 在 PHP 7 中,很多致命错误以及可恢复的致命错误,都被转换为异常来处理了。 这些异常继承自 Error 类,此类实现了 Throwable 接口 (所有异常都实现了这个基础接口)。 PHP7进一步方便开发者处理, 让开发者对程序的掌控能力更强. 因为在默认情况下, Error会直接导致程序中断,

软件设计模式学习(十九)解释器模式

人走茶凉 提交于 2020-08-10 11:39:53
解释器是一种不常使用的设计模式,它用于描述如何构成一个简单的语言解释器,主要应用于使用面向对象语言开发的编译器和解释器设计。当我们需要开发一个新的语言时,可以考虑使用解释器模式 模式动机 如果在系统中某一特定类型的问题发生的频率很高,此时可以考虑将这些问题的实例表述为一个语言中的句子。再构建一个解释器,解释器通过解释这些句子来解决对应的问题。 举个例子,我们希望系统提供一个功能来支持一种新的加减法表达式语言,当输入表达式为 "1 + 2 + 3 - 4 + 1" 时,输出计算结果为 3。为了实现上述功能,需要对输入表达式进行解释,如果不作解释,直接把 "1 + 2 + 3 - 4 + 1" 丢过去,现有的如 Java、C 之类的编程语言只会把它当作普通的字符串,不可能实现我们想要的计算效果。我们必须自己定义一套规则来实现该语句的解释,即实现一个简单语言来解释这些句子,这就是解释器模式的模式动机。 模式定义 定义语言的文法,并且建立一个解释器来解释该语言中的句子,这里的 “语言” 意思是使用规定格式和语法的代码,它是一种类行为型模式。 模式结构 AbstractExpression(抽象表达式) 声明了抽象的解释操作,它是所有终结符表达式和非终结符表达式的公共父类 TerminalExpression(终结符表达式) 抽象表达式的子类,实现了文法中的终结符相关联的解释操作

AST学习目录

眉间皱痕 提交于 2020-08-08 12:10:50
这是本人的星球,欢迎大家扫码学习,期待您的加入: AST入门与实战 星球 FAQ: 1.这个星球是干啥的? 答:通过学习该星球的知识,对AST(抽象语法数)有个大致的理解,把混淆过的,或者难看的JavaScript源代码通过操作AST,变得清晰可见,更容易静态分析和动态调试。 也可以防止别人分析自己的核心代码,通过操作AST进行混淆,给别人调试分析代码带来一定的困难。 2.什么是AST? 答:在计算机科学中,抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。 它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。 之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。 来源: oschina 链接: https://my.oschina.net/u/4278651/blog/4311305

.NET Core技术研究-通过Roslyn代码分析技术规范提升代码质量

家住魔仙堡 提交于 2020-05-07 16:21:26
随着团队越来越多,越来越大,需求更迭越来越快,每天提交的代码变更由原先的2位数,暴涨到3位数,每天几百次代码Check In,补丁提交,大量的代码审查消耗了大量的资源投入。 如何确保提交代码的质量和提测产品的质量,这两个是非常大的挑战。 工欲善其事,必先利其器。在上述需求背景下,今年我们准备用工具和技术,全面把控并提升代码质量和产品提测质量。即: 1. 代码质量提升: 通过自定义代码扫描规则,将有问题的代码、不符合编码规则的代码扫描出来,禁止签入 2. 产品提测质量: 通过单元测试覆盖率和执行通过率,严控产品提交质量,覆盖率和通过率达不到标准,无法提交测试。 准备用2篇文章,和大家分享我们是如何提升代码质量和产品提测质量的。今天分享第一篇:通过Roslyn代码分析全面提升代码质量。 一、什么是Roslyn Roslyn 是微软开源的 .NET 编译平台(.NET Compiler Platform)。 编译平台支持 C# 和 Visual Basic 代码编译,并提供丰富的代码分析 API。 利用Roslyn可以生成代码分析器和代码修补程序,从而发现和更正编码错误。 分析器不仅理解代码的语法和结构,还能检测应更正的做法。 代码修补程序建议一处或多处修复,以修复分析器发现的编码错误。 我们写下面一堆代码,Roslyn编译器会有如下提示: 通过编写分析器和代码修补程序,主要服务以下场景

.NET Core技术研究-通过Roslyn代码分析技术规范提升代码质量

浪尽此生 提交于 2020-05-07 12:52:30
随着团队越来越多,越来越大,需求更迭越来越快,每天提交的代码变更由原先的2位数,暴涨到3位数,每天几百次代码Check In,补丁提交,大量的代码审查消耗了大量的资源投入。 如何确保提交代码的质量和提测产品的质量,这两个是非常大的挑战。 工欲善其事,必先利其器。在上述需求背景下,今年我们准备用工具和技术,全面把控并提升代码质量和产品提测质量。即: 1. 代码质量提升: 通过自定义代码扫描规则,将有问题的代码、不符合编码规则的代码扫描出来,禁止签入 2. 产品提测质量: 通过单元测试覆盖率和执行通过率,严控产品提交质量,覆盖率和通过率达不到标准,无法提交测试。 准备用2篇文章,和大家分享我们是如何提升代码质量和产品提测质量的。今天分享第一篇:通过Roslyn代码分析全面提升代码质量。 一、什么是Roslyn Roslyn 是微软开源的 .NET 编译平台(.NET Compiler Platform)。 编译平台支持 C# 和 Visual Basic 代码编译,并提供丰富的代码分析 API。 利用Roslyn可以生成代码分析器和代码修补程序,从而发现和更正编码错误。 分析器不仅理解代码的语法和结构,还能检测应更正的做法。 代码修补程序建议一处或多处修复,以修复分析器发现的编码错误。 我们写下面一堆代码,Roslyn编译器会有如下提示: 通过编写分析器和代码修补程序,主要服务以下场景

.NET Core技术研究-通过Roslyn代码分析技术规范提升代码质量

☆樱花仙子☆ 提交于 2020-05-07 08:44:01
随着团队越来越多,越来越大,需求更迭越来越快,每天提交的代码变更由原先的2位数,暴涨到3位数,每天几百次代码Check In,补丁提交,大量的代码审查消耗了大量的资源投入。 如何确保提交代码的质量和提测产品的质量,这两个是非常大的挑战。 工欲善其事,必先利其器。在上述需求背景下,今年我们准备用工具和技术,全面把控并提升代码质量和产品提测质量。即: 1. 代码质量提升: 通过自定义代码扫描规则,将有问题的代码、不符合编码规则的代码扫描出来,禁止签入 2. 产品提测质量: 通过单元测试覆盖率和执行通过率,严控产品提交质量,覆盖率和通过率达不到标准,无法提交测试。 准备用2篇文章,和大家分享我们是如何提升代码质量和产品提测质量的。今天分享第一篇:通过Roslyn代码分析全面提升代码质量。 一、什么是Roslyn Roslyn 是微软开源的 .NET 编译平台(.NET Compiler Platform)。 编译平台支持 C# 和 Visual Basic 代码编译,并提供丰富的代码分析 API。 利用Roslyn可以生成代码分析器和代码修补程序,从而发现和更正编码错误。 分析器不仅理解代码的语法和结构,还能检测应更正的做法。 代码修补程序建议一处或多处修复,以修复分析器发现的编码错误。 我们写下面一堆代码,Roslyn编译器会有如下提示: 通过编写分析器和代码修补程序,主要服务以下场景