Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,9 @@ module.exports = {
// ...
},
settings: {
'svelte3/typescript': require('typescript'), // pass the TypeScript package to the Svelte plugin
'svelte3/typescript': () => require('typescript'), // pass the TypeScript package to the Svelte plugin
// OR
'svelte3/typescript': true, // use TypeScript as peer dependency in the Svelte plugin
// ...
}
};
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
"eslint": ">=6.0.0",
"rollup": "^2",
"sourcemap-codec": "1.4.8",
"svelte": "^3.2.0",
"svelte": "3.34.0",
"typescript": "^4.0.0"
}
}
23 changes: 22 additions & 1 deletion src/processor_options.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,26 @@ if (!linter_path) {
}
const { Linter } = require(linter_path);

// Lazily-loaded Typescript.
let typescript
const getTypescript = settings => {
// Typescript is expensive to load, so only load it if needed.
if (!typescript) {
const tsSetting = settings['svelte3/typescript']
const settingsType = typeof tsSetting;
if (settingsType === 'boolean' && tsSetting === true) {
// Typescript is expensive to load, so only load it if needed.
typescript = require('typescript');
} else if (settingsType === 'function') {
typescript = tsSetting();
} else {
typescript = tsSetting;
}
}

return typescript;
}

// patch Linter#verify
const { verify } = Linter.prototype;
Linter.prototype.verify = function(code, config, options) {
Expand All @@ -17,7 +37,8 @@ Linter.prototype.verify = function(code, config, options) {
processor_options.ignore_styles = settings['svelte3/ignore-styles'];
processor_options.compiler_options = settings['svelte3/compiler-options'];
processor_options.named_blocks = settings['svelte3/named-blocks'];
processor_options.typescript = settings['svelte3/typescript'];
processor_options.typescript = getTypescript(settings);

// call original Linter#verify
return verify.call(this, code, config, options);
};
12 changes: 12 additions & 0 deletions test/samples/typescript-lazy/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module.exports = {
parser: '@typescript-eslint/parser',
extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'],
plugins: ['@typescript-eslint'],
settings: {
'svelte3/typescript': () => require('typescript'),
},
rules: {
indent: ['error', 'tab'],
semi: 'error',
},
};
23 changes: 23 additions & 0 deletions test/samples/typescript-lazy/Input.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<script context="module">
export const z = '';
$: z2 = z;
</script>

<script lang="ts">
export let a: any;

export let b: any
export let d: number;

const asd = d.asd();

interface A {}

function c(x) {}
c(1);

$: z1 = z;
</script>

<o>{b}</o>
<p>{x}</p>
184 changes: 184 additions & 0 deletions test/samples/typescript-lazy/expected.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
[
{
"ruleId": "module-script-reactive-declaration",
"severity": 1,
"line": 3,
"column": 2,
"endLine": 3,
"endColumn": 12
},
{
"ruleId": "no-undef",
"severity": 2,
"line": 3,
"column": 5,
"endLine": 3,
"endColumn": 7
},
{
"ruleId": "unused-export-let",
"severity": 1,
"line": 7,
"column": 13,
"endLine": 7,
"endColumn": 19
},
{
"ruleId": "@typescript-eslint/no-explicit-any",
"severity": 1,
"line": 7,
"column": 16,
"endLine": 7,
"endColumn": 19,
"suggestions": [
{
"messageId": "suggestUnknown",
"fix": {
"range": [
58,
61
],
"text": "unknown"
},
"desc": "Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."
},
{
"messageId": "suggestNever",
"fix": {
"range": [
58,
61
],
"text": "never"
},
"desc": "Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."
}
]
},
{
"ruleId": "indent",
"severity": 2,
"line": 9,
"column": 2,
"endLine": 9,
"endColumn": 3,
"fix": {
"range": [
112,
113
],
"text": ""
}
},
{
"ruleId": "@typescript-eslint/no-explicit-any",
"severity": 1,
"line": 9,
"column": 17,
"endLine": 9,
"endColumn": 20,
"suggestions": [
{
"messageId": "suggestUnknown",
"fix": {
"range": [
79,
82
],
"text": "unknown"
},
"desc": "Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."
},
{
"messageId": "suggestNever",
"fix": {
"range": [
79,
82
],
"text": "never"
},
"desc": "Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."
}
]
},
{
"ruleId": "semi",
"severity": 2,
"line": 9,
"column": 20,
"endLine": 10,
"endColumn": 2,
"fix": {
"range": [
130,
130
],
"text": ";"
}
},
{
"ruleId": "@typescript-eslint/no-unused-vars",
"severity": 1,
"line": 12,
"column": 8,
"endLine": 12,
"endColumn": 11
},
{
"ruleId": "@typescript-eslint/no-empty-interface",
"severity": 2,
"line": 14,
"column": 12,
"endLine": 14,
"endColumn": 13
},
{
"ruleId": "@typescript-eslint/no-unused-vars",
"severity": 1,
"line": 14,
"column": 12,
"endLine": 14,
"endColumn": 13
},
{
"ruleId": "@typescript-eslint/no-unused-vars",
"severity": 1,
"line": 16,
"column": 13,
"endLine": 16,
"endColumn": 14
},
{
"ruleId": "@typescript-eslint/no-empty-function",
"severity": 2,
"line": 16,
"column": 16,
"endLine": 16,
"endColumn": 18
},
{
"ruleId": "module-script-reactive-declaration",
"severity": 1,
"line": 19,
"column": 10,
"endLine": 19,
"endColumn": 11
},
{
"ruleId": "missing-declaration",
"severity": 1,
"line": 23,
"column": 5,
"endLine": 23,
"endColumn": 6
},
{
"ruleId": "no-undef",
"severity": 2,
"line": 23,
"column": 5,
"endLine": 23,
"endColumn": 6
}
]
12 changes: 12 additions & 0 deletions test/samples/typescript-peer-dependency/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module.exports = {
parser: '@typescript-eslint/parser',
extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'],
plugins: ['@typescript-eslint'],
settings: {
'svelte3/typescript': true,
},
rules: {
indent: ['error', 'tab'],
semi: 'error',
},
};
23 changes: 23 additions & 0 deletions test/samples/typescript-peer-dependency/Input.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<script context="module">
export const z = '';
$: z2 = z;
</script>

<script lang="ts">
export let a: any;

export let b: any
export let d: number;

const asd = d.asd();

interface A {}

function c(x) {}
c(1);

$: z1 = z;
</script>

<o>{b}</o>
<p>{x}</p>
Loading