From 1a5796ac319073877d52e2b3e78e9fa016890c19 Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Sat, 2 Dec 2023 19:45:31 +0800 Subject: [PATCH 1/4] feat(jsx-directive): support fragment --- playground/src/components/Comp.vue | 2 + src/rules/jsx-directive/v-tag.yml | 33 +++++++++++++++ src/rules/render/define-render.yml | 65 ++++++++++++------------------ src/rules/render/export-render.yml | 65 ++++++++++++------------------ src/utils/is-fragment.yml | 13 ++++++ src/utils/is-template.yml | 5 +++ 6 files changed, 103 insertions(+), 80 deletions(-) create mode 100644 src/rules/jsx-directive/v-tag.yml create mode 100644 src/utils/is-fragment.yml diff --git a/playground/src/components/Comp.vue b/playground/src/components/Comp.vue index 3836e35..a1183d5 100644 --- a/playground/src/components/Comp.vue +++ b/playground/src/components/Comp.vue @@ -4,6 +4,8 @@ {{ id }} bottom + +
Fragment
--- -id: define-render remove template -language: html -rule: - matches: is-template -fix: |- - ---- - -id: define-render has lang +id: define-render fragment language: html rule: - kind: attribute_value + kind: end_tag + regex: inside: - kind: quoted_attribute_value - inside: - kind: attribute - pattern: $NAME - has: - kind: attribute_name - regex: lang - inside: - matches: is-script + kind: script_element + any: + - precedes: + matches: is-fragment + pattern: + - follows: + matches: is-fragment + pattern: fix: |- - tsx + + defineRender(() => ( + <> + $$$A + + )) + --- -id: define-render no lang +id: define-render remove template language: html rule: - kind: tag_name - regex: script - pattern: $NAME - inside: - matches: is-script - not: - has: - kind: attribute - has: - kind: attribute_name - regex: ^lang$ + any: + - matches: is-template + - matches: is-fragment fix: |- - script lang="tsx" diff --git a/src/rules/render/export-render.yml b/src/rules/render/export-render.yml index e75bae4..c9ec26c 100644 --- a/src/rules/render/export-render.yml +++ b/src/rules/render/export-render.yml @@ -8,63 +8,48 @@ rule: any: - precedes: matches: is-template - has: - kind: element - pattern: $A + pattern: - follows: matches: is-template - has: - kind: element - pattern: $A + pattern: fix: |- export default () => ( - $A + $$$A ) --- -id: export-render remove template -language: html -rule: - matches: is-template -fix: |- - ---- - -id: export-render has lang +id: export-render fragment language: html rule: - kind: attribute_value + kind: end_tag + regex: inside: - kind: quoted_attribute_value - inside: - kind: attribute - pattern: $NAME - has: - kind: attribute_name - regex: lang - inside: - matches: is-script + kind: script_element + any: + - precedes: + matches: is-fragment + pattern: + - follows: + matches: is-fragment + pattern: fix: |- - tsx + + export default () => ( + <> + $$$A + + ) + --- -id: export-render no lang +id: export-render remove template language: html rule: - kind: tag_name - regex: script - pattern: $NAME - inside: - matches: is-script - not: - has: - kind: attribute - has: - kind: attribute_name - regex: ^lang$ + any: + - matches: is-template + - matches: is-fragment fix: |- - script lang="tsx" diff --git a/src/utils/is-fragment.yml b/src/utils/is-fragment.yml new file mode 100644 index 0000000..01e6df5 --- /dev/null +++ b/src/utils/is-fragment.yml @@ -0,0 +1,13 @@ +id: is-fragment +language: html +rule: + kind: element + regex: ^ diff --git a/src/rules/jsx-directive/v-tag.yml b/src/rules/jsx-directive/v-tag.yml index f312440..884b96f 100644 --- a/src/rules/jsx-directive/v-tag.yml +++ b/src/rules/jsx-directive/v-tag.yml @@ -1,3 +1,22 @@ +id: v-self-closing-tag +language: html +rule: + kind: start_tag + pattern: $A + not: + precedes: + stopBy: end + kind: end_tag +transform: + B: + replace: + replace: '>$' + by: /> + source: $A +fix: $B + +--- + id: v-tag has lang language: html rule: From b251b079686ae6d8cba386870f6545533c5c79d2 Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Sun, 3 Dec 2023 01:41:28 +0800 Subject: [PATCH 3/4] fix(define-render): ignore comment in style block --- playground/src/App.vue | 7 +++++++ src/rules/setup-sfc.yml | 25 ++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/playground/src/App.vue b/playground/src/App.vue index e680d7f..8b97cc4 100644 --- a/playground/src/App.vue +++ b/playground/src/App.vue @@ -32,3 +32,10 @@ const compRef = shallowRef() + + \ No newline at end of file diff --git a/src/rules/setup-sfc.yml b/src/rules/setup-sfc.yml index 62c86ef..fa5a25a 100644 --- a/src/rules/setup-sfc.yml +++ b/src/rules/setup-sfc.yml @@ -19,6 +19,24 @@ fix: |- --- +id: setup-sfc start ignore comment in style +language: html +rule: + kind: raw_text + pattern: $A + inside: + kind: style_element +transform: + B: + replace: + replace: \*/ + by: '*\/' + source: $A +fix: |- + $B + +--- + id: setup-sfc end comment language: html rule: @@ -44,7 +62,12 @@ transform: startChar: 2 endChar: -2 source: $A -fix: $B + C: + replace: + replace: \*\\/ + by: '*/' + source: $B +fix: $C --- From 4d74c7031243e6f3406e0bc67f67050d33b909a2 Mon Sep 17 00:00:00 2001 From: gaokefei <260480378@qq.com> Date: Sun, 3 Dec 2023 01:41:49 +0800 Subject: [PATCH 4/4] chore: release v1.0.9 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fc48b7b..9b91a84 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@vue-macros/cli", "type": "module", - "version": "1.0.8", + "version": "1.0.9", "packageManager": "pnpm@8.10.5", "description": "Rewriting at vue macros powered by ast-grep.", "author": "zhiyuanzmj ",