From 075781d55e3fa1ae3bbb7a18dfdfeb2d063b9439 Mon Sep 17 00:00:00 2001 From: Maxime LUCE <maxime@touchify.co> Date: Thu, 9 Sep 2021 11:03:25 +0200 Subject: [PATCH 1/2] fix: handle typescript $$Generic special type --- src/postprocess.js | 1 + test/samples/typescript-generics/.eslintrc.js | 11 +++++++++++ test/samples/typescript-generics/Input.svelte | 14 ++++++++++++++ test/samples/typescript-generics/expected.json | 1 + 4 files changed, 27 insertions(+) create mode 100644 test/samples/typescript-generics/.eslintrc.js create mode 100644 test/samples/typescript-generics/Input.svelte create mode 100644 test/samples/typescript-generics/expected.json diff --git a/src/postprocess.js b/src/postprocess.js index 77f63e9..e38f789 100644 --- a/src/postprocess.js +++ b/src/postprocess.js @@ -99,6 +99,7 @@ const is_valid_message = (block, message, translation) => { case 'no-restricted-syntax': return message.nodeType !== 'LabeledStatement' || get_identifier(get_referenced_string(block, message)) !== '$'; case 'no-self-assign': return !state.var_names.has(get_identifier(get_referenced_string(block, message))); case 'no-unused-labels': return get_referenced_string(block, message) !== '$'; + case 'no-undef': return get_referenced_string(block, message) !== '$$Generic'; case '@typescript-eslint/quotes': case 'quotes': return !translation.options.in_quoted_attribute; } diff --git a/test/samples/typescript-generics/.eslintrc.js b/test/samples/typescript-generics/.eslintrc.js new file mode 100644 index 0000000..5cbce11 --- /dev/null +++ b/test/samples/typescript-generics/.eslintrc.js @@ -0,0 +1,11 @@ +module.exports = { + parser: '@typescript-eslint/parser', + extends: ['plugin:@typescript-eslint/recommended'], + plugins: ['@typescript-eslint'], + settings: { + 'svelte3/typescript': require('typescript'), + }, + rules: { + 'no-undef': 'error', + }, +}; diff --git a/test/samples/typescript-generics/Input.svelte b/test/samples/typescript-generics/Input.svelte new file mode 100644 index 0000000..508cac7 --- /dev/null +++ b/test/samples/typescript-generics/Input.svelte @@ -0,0 +1,14 @@ +<script lang="ts"> + type T = $$Generic; + type U = $$Generic<string>; + export let items: T[]; + export let message: U; +</script> + +{#each items as item} + <slot {item} /> +{/each} + +{#if message} + {message} +{/if} diff --git a/test/samples/typescript-generics/expected.json b/test/samples/typescript-generics/expected.json new file mode 100644 index 0000000..fe51488 --- /dev/null +++ b/test/samples/typescript-generics/expected.json @@ -0,0 +1 @@ +[] From 8ad3278dcf142b3c80aaaedd0e6268d141610521 Mon Sep 17 00:00:00 2001 From: Conduitry <git@chor.date> Date: Thu, 9 Sep 2021 16:24:56 -0400 Subject: [PATCH 2/2] tidy formatting --- src/postprocess.js | 2 +- test/samples/typescript-generics/Input.svelte | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/postprocess.js b/src/postprocess.js index e38f789..e1a9d60 100644 --- a/src/postprocess.js +++ b/src/postprocess.js @@ -98,8 +98,8 @@ const is_valid_message = (block, message, translation) => { case 'no-labels': return get_identifier(get_referenced_string(block, message)) !== '$'; case 'no-restricted-syntax': return message.nodeType !== 'LabeledStatement' || get_identifier(get_referenced_string(block, message)) !== '$'; case 'no-self-assign': return !state.var_names.has(get_identifier(get_referenced_string(block, message))); - case 'no-unused-labels': return get_referenced_string(block, message) !== '$'; case 'no-undef': return get_referenced_string(block, message) !== '$$Generic'; + case 'no-unused-labels': return get_referenced_string(block, message) !== '$'; case '@typescript-eslint/quotes': case 'quotes': return !translation.options.in_quoted_attribute; } diff --git a/test/samples/typescript-generics/Input.svelte b/test/samples/typescript-generics/Input.svelte index 508cac7..e120bfb 100644 --- a/test/samples/typescript-generics/Input.svelte +++ b/test/samples/typescript-generics/Input.svelte @@ -1,14 +1,14 @@ -<script lang="ts"> - type T = $$Generic; - type U = $$Generic<string>; - export let items: T[]; - export let message: U; +<script lang='ts'> + type T = $$Generic; + type U = $$Generic<string>; + export let items: T[]; + export let message: U; </script> {#each items as item} - <slot {item} /> + <slot {item} /> {/each} {#if message} - {message} + {message} {/if}