From f735db627b056e629b55a79c48ffa70f51f70e90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=81=E5=AE=81?= <383514580@qq.com> Date: Fri, 21 Feb 2020 01:17:23 +0800 Subject: [PATCH] =?UTF-8?q?wip:=20=E7=AE=80=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 7 +- packages/www/src/RULES.js | 46 ++++++------ rules.json | 1 + src/anyrule.ts | 142 -------------------------------------- src/constant.ts | 1 + src/diagram/index.html | 107 ---------------------------- src/diagram/panel.ts | 19 ----- src/extension.ts | 59 ++-------------- src/interface.d.ts | 6 ++ src/loader.ts | 45 ------------ src/useCommand.ts | 24 +++++++ src/useCompletion.ts | 58 ++++++++++++++++ src/utils.ts | 91 ------------------------ wip.zip | Bin 0 -> 51351 bytes yarn.lock | 140 +++++++++++++++++++++++++++++++++++++ 15 files changed, 265 insertions(+), 481 deletions(-) create mode 100644 rules.json delete mode 100644 src/anyrule.ts delete mode 100644 src/diagram/index.html delete mode 100644 src/diagram/panel.ts delete mode 100644 src/loader.ts create mode 100644 src/useCommand.ts create mode 100644 src/useCompletion.ts delete mode 100644 src/utils.ts create mode 100644 wip.zip diff --git a/package.json b/package.json index cfdb079..9649d78 100644 --- a/package.json +++ b/package.json @@ -354,8 +354,8 @@ "@types/vscode": "^1.12.0", "glob": "^7.1.4", "mocha": "^6.1.4", - "typescript": "^3.3.1", "tslint": "^5.12.1", + "typescript": "^3.3.1", "vscode-test": "^1.0.2" }, "configuration": { @@ -373,5 +373,8 @@ "description": "激活AnyRule的文件类型,多个类型用逗号分隔" } } + }, + "dependencies": { + "transliteration": "^2.1.8" } -} \ No newline at end of file +} diff --git a/packages/www/src/RULES.js b/packages/www/src/RULES.js index 14caf88..c31f78b 100644 --- a/packages/www/src/RULES.js +++ b/packages/www/src/RULES.js @@ -59,7 +59,7 @@ module.exports = [{ examples: ['/usr/ad/dd/a.js', '/root/b.ts'] }, { - title: 'window下"文件夹"路径', + title: 'window"文件夹"路径', rule: /^[a-zA-Z]:\\(?:\w+\\?)*$/, examples: ['C:\\Users\\Administrator\\Desktop', 'e:\\m\\'] }, @@ -69,7 +69,7 @@ module.exports = [{ examples: ['C:\\Users\\Administrator\\Desktop\\qq.link', 'e:\\m\\vscode.exe'] }, { - title: 'A股代码', + title: '股票代码(A股)', rule: /^(s[hz]|S[HZ])(000[\d]{3}|002[\d]{3}|300[\d]{3}|600[\d]{3}|60[\d]{4})$/, examples: ['sz000858', 'SZ002136', 'sz300675', 'SH600600', 'sh601155'] }, @@ -145,12 +145,12 @@ module.exports = [{ examples: ['James', 'Kevin Wayne Durant', 'Dirk Nowitzki'] }, { - title: '新能源车牌号', + title: '车牌号(新能源)', rule: /[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-HJ-NP-Z]{1}(([0-9]{5}[DF])|([DF][A-HJ-NP-Z0-9][0-9]{4}))$/, examples: ['京AD92035', '甘G23459F'], }, { - title: '非新能源车牌号', + title: '车牌号(非新能源)', rule: /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-HJ-NP-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/, examples: ['京A00599', '黑D23908'] }, @@ -160,17 +160,17 @@ module.exports = [{ examples: ['京A12345D', '京A00599'] }, { - title: '中国手机号(严谨), 根据工信部2019年最新公布的手机号段', + title: '手机号中国(严谨), 根据工信部2019年最新公布的手机号段', rule: /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-7|9])|(?:5[0-3|5-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[1|8|9]))\d{8}$/, examples: ['008618311006933', '+8617888829981', '19119255642'] }, { - title: '中国手机号(宽松), 只要是13,14,15,16,17,18,19开头即可', + title: '手机号中国(宽松), 只要是13,14,15,16,17,18,19开头即可', rule: /^(?:(?:\+|00)86)?1[3-9]\d{9}$/, examples: ['008618311006933', '+8617888829981', '19119255642'] }, { - title: '中国手机号(最宽松), 只要是1开头即可, 如果你的手机号是用来接收短信, 优先建议选择这一条', + title: '手机号中国(最宽松), 只要是1开头即可, 如果你的手机号是用来接收短信, 优先建议选择这一条', rule: /^(?:(?:\+|00)86)?1\d{10}$/, examples: ['008618311006933', '+8617888829981', '19119255642'] }, @@ -180,22 +180,22 @@ module.exports = [{ examples: ['1990-12-12', '2020-1-1'] }, { - title: '邮箱地址(email)', + title: 'email(邮箱)', rule: /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/, examples: ['90203918@qq.com', 'nbilly@126.com'] }, { - title: '国内座机电话,如: 0341-86091234', + title: '座机电话(国内),如: 0341-86091234', rule: /\d{3}-\d{8}|\d{4}-\d{7}/, examples: ['0936-4211235'] }, { - title: '一代身份证号(15位数字)', + title: '身份证号(1代,15位数字)', rule: /^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$/, examples: ['622001790131123'] }, { - title: '二代身份证号(18位数字),最后一位是校验位,可能为数字或字符X', + title: '身份证号(2代,18位数字),最后一位是校验位,可能为数字或字符X', rule: /^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}[\dXx]$/, examples: ['62222319991205131x'] }, @@ -215,48 +215,48 @@ module.exports = [{ examples: ['justin', 'justin1989', 'justin_666'] }, { - title: '纯中文/汉字', + title: '中文/汉字', // rule: /^[\u4E00-\u9FA5]+$/, rule: /^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])+$/, examples: ['正则', '前端'] }, { - title: '是否小数', + title: '小数', rule: /^\d+\.\d+$/, examples: ['0.0', '0.09'] }, { - title: '纯数字', + title: '数字', rule: /^\d{1,}$/, examples: [12345678] }, { - title: '是否html标签(宽松匹配)', + title: 'html标签(宽松匹配)', rule: /<(\w+)[^>]*>(.*?<\/\1>)?/, examples: ['
2333
', '', '
'] }, { - title: '是否qq号格式正确', + title: 'qq号格式正确', rule: /^[1-9][0-9]{4,10}$/, examples: [903013545, 9020304] }, { - title: '是否由数字和字母组成', + title: '数字和字母组成', rule: /^[A-Za-z0-9]+$/, examples: ['james666', 'haha233hi'] }, { - title: '纯英文字母', + title: '英文字母', rule: /^[a-zA-Z]+$/, examples: ['Russel'] }, { - title: '纯小写英文字母组成', + title: '小写英文字母组成', rule: /^[a-z]+$/, examples: ['russel'] }, { - title: '纯大写英文字母', + title: '大写英文字母', rule: /^[A-Z]+$/, examples: ['ABC', 'KD'] }, @@ -291,12 +291,12 @@ module.exports = [{ examples: ['github666', 'kd_-666'] }, { - title: '中国邮政编码', + title: '邮政编码(中国)', rule: /^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/, examples: ['734500', '100101'] }, { - title: '只包含中文和数字', + title: '中文和数字', rule: /^((?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])|(\d))+$/, examples: ['哈哈哈', '你好6啊'] }, @@ -306,7 +306,7 @@ module.exports = [{ examples: ['你好6啊', '@¥()!'] }, { - title: 'Android 包名校验', + title: 'java包名', rule: /^([a-zA-Z_][a-zA-Z0-9_]*)+([.][a-zA-Z_][a-zA-Z0-9_]*)+$/, examples: ['com.bbb.name'] } diff --git a/rules.json b/rules.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/rules.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/src/anyrule.ts b/src/anyrule.ts deleted file mode 100644 index 55848b2..0000000 --- a/src/anyrule.ts +++ /dev/null @@ -1,142 +0,0 @@ -import { ExtensionContext, CompletionItem, CompletionItemKind, languages, Disposable, workspace, window, commands, TextDocument, Position, Range, Selection } from "vscode"; -import { generateFilterString, getRulesByText } from "./utils"; -import { IRule } from "./interface"; -import { loadRules } from './loader'; -import { RegexDiagram } from './diagram/panel'; - -export class AnyRule { - context: ExtensionContext; - disposable: Disposable | null = null; - rules: IRule[] | null = null; - regexDiagram: RegexDiagram | null = null; - constructor(context: ExtensionContext) { - this.context = context; - this.regexDiagram = new RegexDiagram(context); - loadRules(context.extensionPath).then(rules => { - this.rules = rules; - this.load(); - this.oldFunctionCompatible(); - }); - } - public load() { - let currentRules: IRule[] = []; - const configuration = workspace.getConfiguration(); - let START_IDENTIFIER: string = configuration.get('anyRule.triggerString') || 'zz'; - const setting: string = configuration.get('anyRule.supportedLanguages') || 'javascript,typescirpt' as string; - const supportedLanguages = setting.split(','); - this.commandRegisters(START_IDENTIFIER); - this.disposable = languages.registerCompletionItemProvider(supportedLanguages, { - provideCompletionItems: (document, position, token, context) => { - const line = document.lineAt(position); - const lineText = line.text.substring(0, position.character); - if (new RegExp(`${START_IDENTIFIER}\.`, 'g').test(lineText)) { - currentRules = getRulesByText(START_IDENTIFIER, this.rules || [], lineText); - return currentRules.map(rule => { - const item = new CompletionItem(rule.title, rule.regex ? CompletionItemKind.Field : CompletionItemKind.Folder); - // @ts-ignore - item.rule = rule; - // item.commitCharacters = ['.']; - item.filterText = generateFilterString(rule); - item.documentation = rule.regex ? `${rule.title}\n${rule.examples ? '\n示例:\n' + rule.examples.join('\n') : ''}` : undefined; - item.command = { - title: '插入正则', - command: 'functions.insertRegex', - arguments: [document, position, rule] - }; - return item; - }); - } - }, - resolveCompletionItem: (item: CompletionItem) => { - // @ts-ignore - const rule: IRule = item.rule; - if (rule.regex) { - return null; - } else { - item.insertText = item.label + '.'; - return item; - } - }, - }, '.'); - - this.context.subscriptions.push(this.disposable); - // window.showInformationMessage('AnyRule加载成功'); - } - - public reload() { - if (this.disposable) { - this.disposable.dispose(); - } - - this.load(); - } - - public update() { - loadRules(this.context.extensionPath, true).then(rules => { - this.rules = rules; - this.reload(); - window.showInformationMessage('正则库已更新'); - }); - } - - private commandRegisters(START_IDENTIFIER: string) { - commands.getCommands().then((commandList) => { - if (commandList.indexOf('functions.insertRegex') !== -1) { - return; - } - commands.registerCommand('functions.insertRegex', (document: TextDocument, position: Position, rule: IRule) => { - if (rule.regex) { - const editor = window.activeTextEditor; - editor?.edit(editBuilder => { - const line = document.lineAt(position); - const start = line.text.indexOf(START_IDENTIFIER); - if (start === -1) { - return; - } - - if (rule.regex) { - editBuilder.replace( - new Range(new Position(line.lineNumber, start), - new Position(line.lineNumber, line.text.length)), - String(rule.regex) - ); - // TODO 处理输入文本后选中字符串的问题 - setTimeout(() => { - const end = new Position(line.lineNumber, line.text.length + String(rule.regex).length); - editor.selection = new Selection(end, end); - }, 0); - } - }); - } else { - commands.executeCommand('editor.action.triggerSuggest'); - } - }); - }); - } - - /** - * 兼容旧的功能,大概率会在未来废弃,仅过度使用 - */ - private oldFunctionCompatible() { - this.rules?.forEach((rule, index) => { - commands.registerCommand(`extension.rule${index}`, () => { - const editor = window.activeTextEditor; - if (editor) { - const { selections } = editor; - - editor.edit(editBuilder => { - selections.forEach(selection => { - const { start, end } = selection; - const range = new Range(start, end); - editBuilder.replace(range, String(rule.regex)); - }); - }); - // Display a message box to the user - window.showInformationMessage(`已插入正则: ${rule.title}`); - } else { - window.showWarningMessage('any-rule: 只有在编辑文本的时候才可以使用!'); - } - }); - }); - } -} \ No newline at end of file diff --git a/src/constant.ts b/src/constant.ts index e69de29..9ea1fae 100644 --- a/src/constant.ts +++ b/src/constant.ts @@ -0,0 +1 @@ +export const COMPLETION_TRIGGER_ID = 'zz.'; \ No newline at end of file diff --git a/src/diagram/index.html b/src/diagram/index.html deleted file mode 100644 index d7989f7..0000000 --- a/src/diagram/index.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - 图解Regex - - - - - 图解Regex -
-
- -
star
-
-
-
- - - - - diff --git a/src/diagram/panel.ts b/src/diagram/panel.ts deleted file mode 100644 index 2911eb2..0000000 --- a/src/diagram/panel.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { WebviewPanel, window, ViewColumn, Uri, workspace, ExtensionContext } from "vscode"; -import { join } from 'path'; -import { readFileSync } from "fs"; - -export class RegexDiagram { - regex: string | null = null; - panel: WebviewPanel | null = null; - constructor(context: ExtensionContext) { - this.panel = window.createWebviewPanel('regexDiagram', '图解正则表达式', ViewColumn.Two, { - enableScripts: true, - retainContextWhenHidden: false, - }); - console.log(join(context.extensionPath, 'src/diagram', './index.html')); - this.panel.webview.html = readFileSync(join(context.extensionPath, 'src/diagram', './index.html')).toString(); - this.panel.webview.postMessage({ - regex: this.regex || '/aaaaab{1,3}/', - }); - } -} \ No newline at end of file diff --git a/src/extension.ts b/src/extension.ts index b87172d..9ee8765 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,61 +1,16 @@ // The module 'vscode' contains the VS Code extensibility API // Import the module and reference it with the alias vscode in your code below import { - window, workspace, commands, - ExtensionContext, ConfigurationChangeEvent + ExtensionContext } from 'vscode'; -import { IRule } from './interface'; -import { AnyRule } from './anyrule'; +const RULES: { title: string, rule: RegExp, examples: string[] }[] = require('../packages/www/src/RULES.js'); +import useCommand from './useCommand'; +import useCompletion from './useCompletion'; + -// this method is called when your extension is activated -// your extension is activated the very first time the command is executed export function activate(context: ExtensionContext) { - - // Use the console to output diagnostic information (console.log) and errors (console.error) - // This line of code will only be executed once when your extension is activated - console.log('Congratulations, your extension "any-rule" is now active!'); - - // The command has been defined in the package.json file - // Now provide the implementation of the command with registerCommand - // The commandId parameter must match the command field in package.json - // let disposable = vscode.commands.registerCommand('extension.helloWorld', () => { - // // The code you place here will be executed every time your command is executed - - - - const anyRule = new AnyRule(context); - - workspace.onDidChangeConfiguration((event: ConfigurationChangeEvent) => { - anyRule.reload(); - }); - - commands.registerCommand('extension.update', () => { - anyRule.update(); - }); - commands.registerCommand('extension.reload', () => { - anyRule.reload(); - window.showInformationMessage('重新加载插件成功'); - }); - commands.registerCommand('extension.support', () => { - const currentLanguage = window.activeTextEditor?.document.languageId; - if (currentLanguage) { - try { - const configuration = workspace.getConfiguration(); - const setting: string = configuration.get('anyRule.supportedLanguages') || 'javascript,typescirpt' as string; - const supportedLanguages = setting.split(','); - const set = new Set(supportedLanguages); - set.add(currentLanguage); - console.log(Array.from(set).join(',')); - configuration.update('anyRule.supportedLanguages', Array.from(set).join(',')).then(() => { - anyRule.reload(); - }); - window.showInformationMessage('更新关联语言成功'); - } catch(e) { - window.showInformationMessage('更新关联语言失败'); - } - } - }); + useCommand(context, RULES); + useCompletion(context, RULES); } -// this method is called when your extension is deactivated export function deactivate() { } diff --git a/src/interface.d.ts b/src/interface.d.ts index d944270..c9fec08 100644 --- a/src/interface.d.ts +++ b/src/interface.d.ts @@ -4,4 +4,10 @@ export interface IRule { regex?: RegExp | string; rules?: IRule[]; examples?: string[]; +} + +export interface Rule{ + title:string, + rule:RegExp, + examples:string[] } \ No newline at end of file diff --git a/src/loader.ts b/src/loader.ts deleted file mode 100644 index 92713f5..0000000 --- a/src/loader.ts +++ /dev/null @@ -1,45 +0,0 @@ -import axios from 'axios'; -import { IRule } from './interface'; -import { writeFileSync, readFileSync } from 'fs'; -import { join as pathJoin } from 'path'; - -async function loadRulesFromFile(path: string): Promise { - try { - const json = readFileSync(path); - return JSON.parse(json.toString()) as IRule[]; - } catch(e) { - return null; - } -} - -async function loadRulesFromWeb(): Promise { - const dataSources = [ - 'https://raw.githubusercontent.com/any86/any-rule/feature/vscode-refactor/rules.json' - ]; - let rules: IRule[] = []; - for (const source of dataSources) { - try { - const response = await axios.get(source); - const body = response.data; - rules = body as IRule[]; - } catch(e) { - console.log(e); - continue; - } - } - - return rules; -} - -export async function loadRules (extensionPath: string, force: boolean = false): Promise { - const rulePath = pathJoin(extensionPath, 'rules.json'); - let rules: IRule[] | null = null; - if (!force) { - rules = await loadRulesFromFile(rulePath); - } - if (!rules) { - rules = await loadRulesFromWeb(); - writeFileSync(rulePath, Buffer.from(JSON.stringify(rules))); - } - return rules; -} diff --git a/src/useCommand.ts b/src/useCommand.ts new file mode 100644 index 0000000..6106347 --- /dev/null +++ b/src/useCommand.ts @@ -0,0 +1,24 @@ +import * as vscode from "vscode"; +import { Rule } from './interface'; +export default function (context: vscode.ExtensionContext, RULES: Rule[]) { + RULES.forEach(({ title, rule }, index) => { + let disposable = vscode.commands.registerCommand(`extension.rule${index}`, () => { + const editor = vscode.window.activeTextEditor; + if (editor) { + const { selections } = editor; + + editor.edit(editBuilder => { + selections.forEach(selection => { + const { start, end } = selection; + const range = new vscode.Range(start, end); + editBuilder.replace(range, String(rule)); + }); + }); + vscode.window.showInformationMessage(`已插入正则: ${title}`); + } else { + vscode.window.showWarningMessage('any-rule: 只有在编辑文本的时候才可以使用!'); + } + }); + context.subscriptions.push(disposable); + }); +} \ No newline at end of file diff --git a/src/useCompletion.ts b/src/useCompletion.ts new file mode 100644 index 0000000..38bce2a --- /dev/null +++ b/src/useCompletion.ts @@ -0,0 +1,58 @@ +import { ExtensionContext, CompletionItem, CompletionItemKind, languages, Disposable, workspace, window, commands, TextDocument, Position, Range, Selection, MarkdownString } from "vscode"; +import { Rule } from './interface'; +import { COMPLETION_TRIGGER_ID } from './constant'; +export default function (context: ExtensionContext, RULES: Rule[]) { + registerCommand(); + const disposable = languages.registerCompletionItemProvider('plaintext', { + provideCompletionItems(document, position) { + const linePrefix = document.lineAt(position).text.substr(0, position.character); + if (!linePrefix.endsWith(COMPLETION_TRIGGER_ID)) return; + + return RULES.map(({ rule, title, examples }) => { + const item = new CompletionItem(title, CompletionItemKind.Method); + const ruleString = String(rule); + + item.insertText = ruleString; + item.documentation = new MarkdownString(`### 示例\r\n${examples.join(',')}`); + // item.filterText = '手'; + item.command = { + title: '插入正则', + command: 'functions.insertRegex', + arguments: [document, position, ruleString] + }; + return item; + }) + }, + + resolveCompletionItem(item) { + return item; + } + }, '.'); + context.subscriptions.push(disposable); +} + +function registerCommand() { + commands.registerCommand('functions.insertRegex', (document: TextDocument, position: Position, ruleString: string) => { + const editor = window.activeTextEditor; + if (void 0 === editor) return; + editor.edit(editBuilder => { + const line = document.lineAt(position); + // 起始 + const startPostion = new Position(line.lineNumber, line.text.indexOf(COMPLETION_TRIGGER_ID)); + + // 结束 + const endPostion = new Position(line.lineNumber, startPostion.character + ruleString.length + COMPLETION_TRIGGER_ID.length); + + // window.showInformationMessage( + // '' + startPostion.character + // , ''+endPostion.character + // ); + + editBuilder.replace(new Range(startPostion, endPostion), ruleString); + + setTimeout(() => { + editor.selection = new Selection(startPostion, endPostion); + }, 0); + }); + }); +} diff --git a/src/utils.ts b/src/utils.ts deleted file mode 100644 index 3c7e570..0000000 --- a/src/utils.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { IRule } from './interface'; -// import { convertToPinyin } from 'tiny-pinyin'; -import { slugify } from 'transliteration'; - -function preprocessText(START_IDENTIFIER: string, text: string): string[] | null { - const start = text.indexOf(START_IDENTIFIER); - if (start === -1) { - return null; - } - const pathString = text.substring(start, text.length); - const pathArray = pathString.split('.'); - return pathArray; -} - -/** - * 根据特定的字符串解析出当前可以用的规则列表 - * @param text 待解析的字符串 - */ -export function getRulesByText(START_IDENTIFIER: string, rules: IRule[], text: string): IRule[] { - const pathArray = preprocessText(START_IDENTIFIER, text); - if (!pathArray) { - return []; - } - let currentRules: IRule[] = []; - let targetRules = rules; - - for (const path of pathArray) { - if (path === START_IDENTIFIER) { - currentRules = rules; - } else if (path === '') { - break; - } else { - const searchRule = targetRules.find(rule => rule.title === path); - - if (!searchRule) { - return []; - } - - if (searchRule.regex) { - return []; - } - - currentRules = searchRule.rules || []; - targetRules = currentRules; - } - } - - return currentRules; -} - -export function getRuleByText(START_IDENTIFIER: string, rules: IRule[], text: string): IRule | null { - const pathArray = preprocessText(START_IDENTIFIER, text); - if (!pathArray) { - return null; - } - let targetRules = rules; - let searchRule: IRule | undefined; - for (const path of pathArray) { - if (path === START_IDENTIFIER) { - continue; - } - - searchRule = targetRules.find(rule => rule.title === path); - if (!searchRule) { - return null; - } - if (searchRule.regex) { - break; - } else { - targetRules = searchRule.rules || []; - } - } - - return searchRule || null; -} - -export function generateFilterString(rule: IRule) { - let filterString = ''; - filterString += rule.title; - const pinyin = slugify(rule.title).split('-'); - if (/.*[\u4e00-\u9fa5]+.*$/.test(rule.title)) { - filterString += ' ' + pinyin.join(''); - filterString += ' ' + pinyin.map(item => item.length ? item[0] : ''); - } - - if (rule.keywords) { - filterString += ' ' + rule.keywords.join(' '); - } - - return filterString; -} diff --git a/wip.zip b/wip.zip new file mode 100644 index 0000000000000000000000000000000000000000..0a5187f845f42d15c93dcd3d1c36e95803785d66 GIT binary patch literal 51351 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 literal 0 HcmV?d00001 diff --git a/yarn.lock b/yarn.lock index cb8260c..5e10019 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18,6 +18,11 @@ esutils "^2.0.2" js-tokens "^4.0.0" +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + "@types/events@*": version "3.0.0" resolved "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" @@ -84,6 +89,11 @@ ansi-regex@^4.1.0: resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -91,6 +101,14 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.0: + version "4.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -144,6 +162,15 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -156,11 +183,23 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + commander@^2.12.1: version "2.20.0" resolved "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" @@ -218,6 +257,11 @@ emoji-regex@^7.0.1: resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -293,6 +337,14 @@ find-up@3.0.0, find-up@^3.0.0: dependencies: locate-path "^3.0.0" +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + flat@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" @@ -439,6 +491,11 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-regex@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" @@ -491,6 +548,13 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + lodash@^4.17.11: version "4.17.15" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" @@ -673,6 +737,13 @@ p-limit@^2.0.0: dependencies: p-try "^2.0.0" +p-limit@^2.2.0: + version "2.2.2" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== + dependencies: + p-try "^2.0.0" + p-locate@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -680,6 +751,13 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-try@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -690,6 +768,11 @@ path-exists@^3.0.0: resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -793,6 +876,15 @@ string-width@^3.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -814,6 +906,13 @@ strip-ansi@^5.1.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -838,6 +937,13 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +transliteration@^2.1.8: + version "2.1.8" + resolved "https://registry.npmjs.org/transliteration/-/transliteration-2.1.8.tgz#b2a032107be42910dbb792ff96b39938114a4eb8" + integrity sha512-ds3uRxcS0yCxzP4xP30dz+ImEeVhgAwSaewhlApuYYTUuT8+wFFLoFfO1nHvfJzbpoRBp4lS52Ai3wm8IkemIQ== + dependencies: + yargs "^15.0.2" + tslib@^1.8.0, tslib@^1.8.1: version "1.10.0" resolved "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" @@ -909,6 +1015,15 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -943,6 +1058,14 @@ yargs-parser@^13.0.0: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^16.1.0: + version "16.1.0" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz#73747d53ae187e7b8dbe333f95714c76ea00ecf1" + integrity sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-unparser@1.5.0: version "1.5.0" resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz#f2bb2a7e83cbc87bb95c8e572828a06c9add6e0d" @@ -986,3 +1109,20 @@ yargs@^12.0.5: which-module "^2.0.0" y18n "^3.2.1 || ^4.0.0" yargs-parser "^11.1.1" + +yargs@^15.0.2: + version "15.1.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-15.1.0.tgz#e111381f5830e863a89550bd4b136bb6a5f37219" + integrity sha512-T39FNN1b6hCW4SOIk1XyTOWxtXdcen0t+XYrysQmChzSipvhBO8Bj0nK1ozAasdk24dNWuMZvr4k24nz+8HHLg== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^16.1.0"