我正在用Python编写一个静态代码分析工具。
下面是需要分析的代码示例:
import {
component$,
useClientEffect$,
} from '@builder.io/qwik'
import Swiper from 'swiper'
import {
Navigation,
Pagination
} from 'swiper'
import { Image } from 'Base'
import Button from '../Shared/Button'
import Heading from '../Shared/Heading'
const Portfolio = component$(
(
{
items,
title,
linkText,
link
}
) => {
我必须检查的一项是确保在最后一次导入之后有一个空行。正如您在上面的示例中看到的,作为组件声明的const Portfolio
被附加到前面的导入中。我需要确保它前面有一个空行。
我尝试了(?<=import).*(?=from)
,但它不起作用。请注意,开发人员可能会在两个导入之前放置空行。或者,他可能在输入前放置空白。换句话说,开发人员可能会写出最不格式化的代码。
我可以使用什么正则表达式来确保这个要求?
这是我目前想到的解决方案:
"(^[sn]{0,}import.*from[^a-zA-Z0-9]+[ ./a-zA-Z0-9']+$)|(^[s]{0,}import.*(n +.*|s)*.*from[^a-zA-Z0-9]+[ ./a-zA-Z'0-9]+$)"mg
有两组:
(^[sn]{0,}import.*from[^a-zA-Z0-9]+[ ./a-zA-Z0-9']+$)
^[sn]{0,}import
—一行以import开头. 在这个单词之前,我们可以遇到(或者根本没有)空格,新行。import.*from
之间的文字import和与我们可以满足任何from[^a-zA-Z0-9]+[ ./a-zA-Z0-9']+$
-字来自后面跟着非字母&非数字符号([^a-zA-Z0-9]+
)或字母/数字/单引号/点/空格([ ./a-zA-Z0-9']+
)。
(^[s]{0,}import.*(n +.*|s)*.*from[^a-zA-Z0-9]+[ ./a-zA-Z'0-9]+$)
^[s]{0,}import
-一行以import开头. 在这个单词之前,我们可以遇到(或者根本没有)一些空格。import.*(n +.*|s)*.*from
-在import之间和与我们可以满足任何多行文本(这就是为什么我们需要标记m
- multiline)from[^a-zA-Z0-9]+[ ./a-zA-Z0-9']+$
-与第一组含义相同
regex101.com