4.3.1
2.1.5
<template>
<q-layout>
<div slot="header" class="toolbar">
<q-toolbar-title :padding="0">
Quasar Framework v{{quasarVersion}}
</q-toolbar-title>
</div>
<!--
Replace following "div" with
"<router-view class="layout-view">" component
if using subRoutes
-->
<div class="layout-view">
<div class="logo-container non-selectable no-pointer-events">
<div class="logo" :style="position">
<img src="~assets/quasar-logo.png">
<p class="caption text-center">
<span class="desktop-only">Move your mouse!!!.</span>
<span class="touch-only">Touch screen and move.</span>
</p>
</div>
</div>
</div>
</q-layout>
</template>
<script lang="ts">
import * as Quasar from 'quasar';
import { Utils } from 'quasar';
import * as Vue from 'vue';
import Component from 'vue-class-component';
const moveForce = 30;
const rotateForce = 40;
@Component({
})
export default class Index extends Vue {
rotateX: number;
rotateY: number;
moveY: number;
moveX: number;
quasarVersion: string;
...
}
</script>
<style lang="stylus">
....
</style>
tslint.json
æ§æã®å ŽåïŒ
{
"rules": {
"class-name": true,
"curly": true,
"eofline": false,
"expr" : true,
"forin": true,
"indent": [true, "spaces"],
"label-position": true,
"label-undefined": true,
"max-line-length": [true, 140],
"no-arg": true,
"no-bitwise": true,
"no-console": [true,
"debug",
"info",
"time",
"timeEnd",
"trace"
],
"no-construct": true,
"no-debugger": true,
"no-duplicate-key": true,
"no-duplicate-variable": true,
"no-empty": true,
"no-eval": true,
"no-string-literal": false,
"no-switch-case-fall-through": true,
"no-trailing-comma": true,
"no-trailing-whitespace": true,
"no-unused-expression": false,
"no-unused-variable": true,
"no-unreachable": true,
"no-use-before-declare": true,
"one-line": [true,
"check-open-brace",
"check-catch",
"check-else",
"check-whitespace"
],
"quotemark": [true, "single"],
"radix": false,
"semicolon": [false],
"triple-equals": [true, "allow-null-check"],
"variable-name": false,
"whitespace": [true,
"check-branch",
"check-decl",
"check-operator",
"check-separator",
"check-type"
]
}
}
ãã¡ã€ã«å šäœããªã³ãããããšããŠå€±æããŸãã
eslintãšåæ§ã«ãã¹ã¯ãªããã¿ã°å ã®ã³ãŒãã®ã¿ã確ââèªããŠãã ããã
@ nrip-monotypeã®å Žåã vue-loader
æ§æããããšã§ãVueåäžãã¡ã€ã«ã³ã³ããŒãã³ãã§TSLintã䜿çšã§ããŸãã ããšãã°ãwebpack 2ã§ã¯æ¬¡ã®ããã«äœ¿çšããŠããŸãïŒ vue-loader
ã®loaders
ãªãã·ã§ã³ãèŠãŠãã ããïŒïŒ
module: {
rules: [
{
enforce: 'pre',
test: /\.ts$/,
loader: 'tslint-loader',
exclude: /(node_modules)/,
options: {
configFile: 'tslint.json'
}
},
{
test: /\.ts$/,
exclude: /node_modules|vue\/src/,
loader: 'ts-loader',
options: {
appendTsSuffixTo: [/\.vue$/],
transpileOnly: true,
isolatedModules: true
}
},
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
loaders: {
ts: 'ts-loader!tslint-loader'
}
}
},
}
}
}
@romandragan ãããªãã®ææ¡ã¯æ©èœããŸããã no-consecutive-blank-lines
åé¡ãããããã§ãã ããŒã¯ã¢ããèŠçŽ ã空ã®è¡ã«çœ®ãæããããŠããããã«èŠããŸãã次ã«äŸã瀺ããŸãã
<template>
<span class='hello'>hello world</span>
</tempalte>
<script lang="ts">
return {};
</script>
<style>
.hello { background-color: pink }
</style>
tslintã§ã¯æ¬¡ã®ããã«è¡šç€ºãããŸãã
return {};
"no-consecutive-blank-lines": [true, 3]
ãããšå€±æããŸããã "no-consecutive-blank-lines": [true, 4]
æåããŸã...ãããåé¿ããæ¹æ³ã¯ãããŸããïŒ ïŒå
é ãšæ«å°Ÿã®ç©ºçœãåé€ããå¥ã®ãã©ã°ã€ã³ãäžè¶³ããŠããŸã...ïŒ
@lucastheisen ãç§ã«ãšã£ãŠåãåé¡ð解決çãèŠã€ããããšããŠããŸã...
@romandraganã®ã»ããã¢ããã¯ç§ã«ãšã£ãŠã¯ããŸããããŸããããtslint-loaderã®typeCheck
ãã©ã°ãvue-loaderã§ã¯æ©èœããªãããšã«æ³šæããŠãã ããã vue-loaderã®å€éšã§ãéåžžã©ãã䜿çšã§ããŸãã
>>
module: {
rules: [
{
enforce: 'pre',
test: /\.ts$/,
loader: 'tslint-loader',
exclude: /(node_modules)/,
options: {
configFile: 'tslint.json'
}
},
{
test: /\.ts$/,
exclude: /node_modules|vue\/src/,
loader: 'ts-loader',
options: {
appendTsSuffixTo: [/\.vue$/],
transpileOnly: true,
isolatedModules: true,
typeCheck: true // This is ok.
}
},
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
loaders: {
ts: 'ts-loader!tslint-loader' // Can't append `?typeCheck` here.
}
}
},
}
}
}
vue-loaderã§ã¿ã€ããã§ãã¯ãããã«ãŒã«ã䜿çšããããšãããšã次ã®ãããªãšã©ãŒãçºçããŸãã
ERROR in ./app.ts
(10,29): error TS2307: Cannot find module './components/sidebar.vue'.
ERROR in ./~/ts-loader!./~/tslint-loader?formatter=verbose&typeCheck!./~/vue-loader/lib/selector.js?type=script&index=0!./components/sidebar.vue
Module build failed: Error:
Invalid source file: /absolute/path/to/sidebar.vue. Ensure that the files supplied to lint have a .ts, .tsx, .js or .jsx extension.
ãŸãã @ lucastheisenããã³@romandraganãšåãno-consecutive-blank-lines
誀æ€ç¥ãçºçããŠããŸãã
ãã®èšå®ã䜿çšãããšã次ã®ERROR in Entry module not found: Error: Can't resolve 'ts-loader!tslint-loader'
ã衚瀺ãããŸãã
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
loaders: {
ts: 'ts-loader!tslint-loader'
}
}
},
@ARomancev ãã©ã®ããŒãžã§ã³ã®webpackã䜿çšããŠããŸããïŒ ts-loader
ãštslint-loader
npmã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ãããŠããŸããïŒ
@romandragan ãããã䜿çšããŠããnpm
`` `
"tslint"ïŒ "^ 5.1.0"ã
"ts-loader"ïŒ "^ 2.0.3"ã
"webpack"ïŒ "^ 2.4.1"ã
And this is the webpack config:
{
test: /\.tsx?$/,
enforce: 'pre',
loader: 'tslint-loader'
},
{
test: /\.tsx?$/,
loader: 'ts-loader',
exclude: /node_modules/,
options: {
appendTsSuffixTo: [/\.vue$/]
}
},
`` `
* .tsãã¡ã€ã«ããæ£ããlintãååŸãããããts-loaderãštslint-loaderã®äž¡æ¹ãã€ã³ã¹ããŒã«ãããæ£åžžã«åäœããŸãã
åé¿çãšããŠãTypeScriptããžãã¯ã.vueãã¡ã€ã«ããåé¢ããvueããŒããŒããtslint-loader
ãåé€ã§ããŸãã ãã®åŸã no-consecutive-blank-lines
æ¶ããŸãã
@romandraganããã¯æ©èœããŸããã <script>
ã¿ã°å
ã«ã³ãŒãããªã³ãããã®ãè¯ãã§ãããïŒããã¯ãšãã£ã¿ãŒã®ãµããŒãã«å¿
èŠã§ãããWebpackå
šäœã§ã¯ãªãtslint
ã³ãã³ããåå¥ã«å®è¡ããæ¹ãã¯ããã«ç°¡åã§ããããŒã
@adidahiyaãã®æ©èœã®èšç»ã¯ãããŸããïŒ
ãŸãã¯eslintãã©ã°ã€ã³ã®ãããªtslintã®ãµããŒããã©ã°ã€ã³ã·ã¹ãã ã®èšç»ã¯ãããŸããïŒ
Webpackã䜿çšããŠããå Žåã fork-ts-checker-webpack-pluginã«no-consecutive-blank-lines
åé¡ããªããã¿ã€ããã§ãã«ãŒã¬ãã«ã§.vue
ãã¡ã€ã«ãæ©èœããŠãªã³ãã£ã³ã°ããŠããŸãã ããã§PRãèŠãããšãã§ããŸãïŒãããŠãã¹ããã©ã³ãããnpm install
ãä»ãã䜿çšããPRã¹ã¬ããã®äžéšãåç
§ããŠãã ããïŒïŒ https ïŒ
ãŸããVSCodeãšãã£ã¿ãŒã䜿çšããŠããå Žåã¯ã TSLintVueæ¡åŒµæ©èœã確èªããŠãã ããã
tslintã«ãã©ã°ã€ã³æ©èœãå®è£ ãããã«ãªã¯ãšã¹ããäœæãããvueãåäžãã¡ã€ã«ã³ã³ããŒãã³ãã解æã§ããæåã®ãã©ã°ã€ã³ãäœæããŸããã
https://github.com/palantir/tslint/pull/3596
https://github.com/Toilal/tslint-plugin-vue
ããã¯é²è¡äžã®äœæ¥ã§ããããæ°è»œã«è©ŠããŠã¿ãŠãã ããã npm install git+https://https://github.com/Toilal/tslint-plugin-vue
ã䜿çšããŠãã©ã°ã€ã³ãè¿œå ãã plugins: 'vue'
ãtslint.json
è¿œå ããŠæå¹ã«ããããšãã§ããŸãã çŸåšã -p/--project
ãªãã·ã§ã³ã§ã¯æ©èœããŸããã -c/--config
ãªãã·ã§ã³ã䜿çšããå¿
èŠããããŸãã
ããã«ã¡ã¯ã¿ããªãä»ã®ãšãããå¥ã®ä»£æ¿ãœãªã¥ãŒã·ã§ã³ã¯ããã¡ã€ã«ã®å
é ã«ã¹ã¯ãªããã¿ã°ã移åãããã®ã«ãŒã«ãèæ
®ããªãããã«æåŸã®è¡ã«/* tslint:disable:no-consecutive-blank-lines */
ãè¿œå ããããšã§ãã
äžã®ç»åã確èªããŠãã ãã
VueããŒããŒã¯å®éã«vueãã¡ã€ã«ããJavaScriptãŸãã¯TypeScriptãæœåºã§ãããããvueãã¡ã€ã«ã®è§£æã¯webpackã«ãšã£ãŠåé¡ã§ã¯ãããŸããã ãã ããtypeCheckãæå¹ã«ãªã£ãŠããå Žåããã¡ã€ã«åã¯ã.vueãã§çµãããããTSLintã¯ãç¡å¹ãªãœãŒã¹ãã¡ã€ã«ããã¹ããŒããŸãã
ããã«ãvue-loaderã¯TypeScriptã«é¢ä¿ã®ãªãè¡ãåé€ããã代ããã«æ£ããè¡çªå·ãç¶æããããã«ããããã¯ãªã¢ãããããvueãã¡ã€ã«ã®æåãŸãã¯æåŸã«é£ç¶ãã空çœè¡ãèš±å¯ããããšã§TSLintãé£ç¶ãã空çœè¡ã®äžæºãåæ¢ããããã«ããããšãã§ããŸãã
ç§ã¯çŸåšãwebpackãå¿
èŠãšããã«ãããã®åé¡ã解決ã§ãããªã³ã¿ãŒã«åãçµãã§ããŸãïŒ //github.com/ajafffââ/wotan
ããã¯çŸåšãæŠå¿µå®èšŒã§ãããTSLintã«çµ±åãããŠããå Žåãšçµ±åãããŠããªãå ŽåããããŸãã ããã¯ãŒãããã®å®å
šãªæžãçŽãã§ãããTSLintãšã¯ã»ãšãã©äºææ§ããããŸããã
ããã»ããµïŒESLintããã»ããµãšåæ§ïŒã䜿çšããŠãã¡ã€ã«ãå€æããæ©èœããããŸãã vueããã»ããµã¯SFCããTypeScriptã³ãŒããæœåºãããªã³ã¿ãŒã¯ã³ãŒãããªã³ãããã ãã§ãããã»ããµã¯ãšã©ãŒãå
ã®ãã¡ã€ã«ã®æ£ããå Žæã«ãããããŸãã ããã¯ã¿ã€ããã§ãã¯ã§ãæ©èœããŸãã
ããã§vueãã¡ã€ã«ã®ãªã³ãã£ã³ã°ã®ãµã³ãã«åºåãèŠãããšãã§ããŸãïŒ
https://github.com/ajafffââ/wotan/blob/master/baselines/integration/processors/vue/default/hello.vue.lint#L29
ãŸããèªåä¿®æ£ãå¯èœã§ãã äžèšãšåããã¡ã€ã«ãèªåçã«ä¿®æ£ãããŸããïŒ https ïŒ
https://github.com/ajafffââ/wotan/issues/32ãä¿®æ£ãããããªãªãŒã¹ãå
¬éããŠãå®éã®ã³ãŒãã§è©Šãããšãã§ããããã«ããŸãã
vueããã»ããµã¯ã¡ã€ã³ãããžã§ã¯ãã®äžéšã§ã¯ãããŸããããããã»ããµçšã«å¥ã®ããã±ãŒãžãå
¬éããããã«ããŸãã
ã³ãã³ãã©ã€ã³ã®tslintãVueãã¡ã€ã«ã®TSéšåããªã³ãããããã«ã tsconfig.json
ãèšå®ããæ¹æ³ãç¥ã£ãŠãã人ã¯ããŸããïŒ VS Codeã§ãåé¡ãªãåäœããŸãããã³ãã³ãã©ã€ã³ã§ãåäœããããã«ããããšæããŸãã
æã£ãããå°ãæéãããããŸãããã https ïŒ ã
linterã©ã³ã¿ã€ã ïŒ @fimbul/wotan
ïŒã䜿çšããŠTSLintã«ãŒã«ãå®è¡ããããšãã§ããŸãã å¿
èŠãªã®ã¯@fimbul/heimdall
ã ãã§ããhttpsïŒ//github.com/fimbullinter/wotan/tree/master/packages/heimdall#readmeãåç
§ããŠ
Vueãã¡ã€ã«ããªã³ãããã«ã¯ã @fimbul/ve
䜿çšããŸãïŒã¿ã€ããã¹ãªãããveãã«ãuãã¯ãããŸããïŒïŒ https ïŒ
tslintãvue / htmlãã¡ã€ã«ã®ãªã³ãã£ã³ã°ããµããŒãããã¹ã±ãžã¥ãŒã«ã¯ãããŸããïŒ @Toilal
ãããå®è£ ããã®ã¯ã³ãã¥ããã£æ¬¡ç¬¬ã§ãããVueJSã®äœè ã¯ãvue-cliã®æåŸã®ããŒãžã§ã³ïŒçŸåšã¯ã¢ã«ãã¡çïŒã§ã¯ãªããESLintTypeScriptãã©ã°ã€ã³ãæ¯æããŠããããã§ãã
ãã®æ©èœã¯ãã§ã«[email protected]
å®è£
ãããŠããããã§ãã èµ°ãïŒ
$ npm install -g @vue/cli
$ vue create project-name
ãããŠããªã³ã¿ãŒãšããŠTSLintã䜿çšãããšããéžæè¢ããããŸãã
ç§ã¯ãã®ã¹ã¬ããã®ãã¹ãŠã®äººã«ããã«å€§ããªãã¥ãŒã¹ãè¿ããŸãïŒ
ææ°ããŒãžã§ã³ã®wotanã¯ã tslint.json
ã«åŸã£ãŠTSLintã«ãŒã«ãå®è¡ã§ããããã»ããµã®ãµããŒããè¿œå ããŸãã ã€ãŸããèšå®ãå€æŽããå¿
èŠããªããä»ããVueãã¡ã€ã«ã®ãªã³ãã£ã³ã°ãéå§ã§ããŸãã
sh
yarn add -D @fimbul/wotan @fimbul/ve @fimbul/valtyr
# or
npm install --save-dev @fimbul/wotan @fimbul/ve @fimbul/valtyr
.fimbullinter.yaml
ãè¿œå ãã次ã®ã³ã³ãã³ããè¿œå ããŸããyaml
modules: "@fimbul/valtyr"
valtyr:
overrides:
- files: "*.vue"
processor: "@fimbul/ve"
sh
wotan # finds tsconfig.json and lints the whole project with type information according to your tslint.json
wotan 'src/**/*.vue' -f verbose # lint all Vue files, use TSLint's verbose formatter
wotan -p tsconfig.json -c tslint.json --fix # lint the whole project with tslint.json and fix failures
@romandragan
vue-loaderãæ§æããããšã«ãããVueåäžãã¡ã€ã«ã³ã³ããŒãã³ãã§TSLintã䜿çšã§ããŸãã
解決ããŠãããŠããããšãã ããããããã¯Webpackåºæã®ãœãªã¥ãŒã·ã§ã³ã«ãããŸããã æã ãVueã®ãtslintããšãã§ããããã«ãã«ãã»ããŒã«ã«äŸåããªãæ±çšçãªè§£æ±ºçããã£ãå Žåã«ã³ã³ãã€ã«ããããã¡ã€ã«ã¯çŽ æŽãããããšã ãã¥ãŒãºããã¯ã¹ïŒãŸãã¯ä»»æã®ä»ã®ãã«ãããŒã«ïŒã
webpackã®å¥ã®ãœãªã¥ãŒã·ã§ã³ã
vue-loaderã«ãã£ãŠæäŸãããããã¡ã€ã«ããããã¹ãŠã®ç©ºçœãåé€ãããªã³ã¿ãŒçšã®ç©ºçœãè¿œå ããåçŽãªããŒããŒãäœæããŸããã
webpack.config.jsïŒ
test:/\.vue$/,
loader: 'vue-loader',
options: {
loaders: {
'ts': [
'vue-ts-loader',
'tslint-loader',
path.resolve('./path/to/remove-whitespace-ts-loader.js')
],....
次ã«ãremove-whitespace-ts-loaderïŒ
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Szymon Sasin
*/
module.exports = function(source) {
let result = source.replace(/^\s+|\s+$/g, '')
result += '\r\n'
return result;
}
_ã³ãŒããã©ãŒããããæ¹åããæ¹æ³ã«ã€ããŠã®ãã«ããæè¿ããŸã_
ããã¯æ£åžžã«åäœãããœãŒã¹ãå€æŽããªãããšãèš±å¯ããŸããããããšã
ç§ãåãããŒãžã«ããã®ãšåãããã«ãPRãšããŠè¡ãããªãéããããã¯ä¿®æ£ãããªãã®ã§ããããïŒ
no-consecutive-blank-lines
ããã®ã»ããã¢ããã§æ©èœããªãããšã«å ããŠïŒã«ã¹ã¿ã ããŒããŒã§åé¿ã§ããã¯ãã§ãïŒãæè¿ã®Webpackãšvue-loaderããŒãžã§ã³ã§ãã typeCheck: true
ååŸã§ããªãããšã«æ³šæããŠãã ããã *.vue
ãã¡ã€ã«ã§æ©èœããŸããããã¯ã tslint
ãæ¡åŒµåã«äžæºãæã£ãŠããããã§ãïŒ appendTsSuffixTo
ïŒã ãã®ãã¢ãããžã§ã¯ãã¯ãç°¡åãªäŸã瀺ããŠããŸãã
ããŒã¯
ããã«ããå°ããã¥ãŒã¹ããããŸããïŒ ð€
誰ããcliã䜿çšããŠ.vueãã¡ã€ã«ããªã³ããããå Žåã¯ã vue-tslintãè©Šãããšãã§ããŸãã å®ç§ã§ã¯ãããŸããããæ©èœããŸã...
@romandraganã®ãœãªã¥ãŒã·ã§ã³ã¯çŸåšãã¹ããã©ã¯ãã£ã¹ã§ã¯ãªãããšã«æ³šæããŠãã ããïŒä»¥åã¯ããã§ãã£ããã©ããã¯\.ts$
ã«ãŒã«ã®use
ã«tslint-loader
ãè¿œå ããŸãã ããã§ã vue-loader
ã¯äžè¬ã«ãã³ãã¬ãŒããã¡ã€ã«ãåŠçããããããã®æ¡åŒµæ©èœã®Webpackæ§æã«ããŸããŸãªã»ã¯ã·ã§ã³ãå§ä»»ããŸãã vue-loader
ã®ãã©ã°ã€ã³ã³ã³ããŒãã³ãã¯ã \.ts$
ã®ã«ãŒã«ãæœåºãããããã®ã«ãŒã«ãä»ããŠ<script lang="ts">
ãããã¯ãã¹ããªãŒãã³ã°ããŸãã
Vue CLIã䜿çšããŠããå Žåã¯ã
config.module.rule('ts')
.use('tslint-loader')
.loader('tslint-loader');
vue.config.js
chainWebpack
ãªãã·ã§ã³ãžã®ã¹ããŒãã¡ã³ãã äŸãã°ã
vue.config.js
module.exports = {
chainWebpack: (config) => {
config.devtool('source-map');
config.module.rule('ts')
.use('tslint-loader')
.loader('tslint-loader');
},
pluginOptions: {
apollo: {
enableMocks: true,
enableEngine: true
}
}
}
ããã¯ç§ã®ããã«åãã
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin')
module.exports = (baseConfig, env, defaultConfig) => {
defaultConfig.resolve.extensions.push('.ts', '.tsx', '.vue', '.css', '.less', '.scss', '.sass', '.html')
defaultConfig.module.rules.push( {
test: /\.ts$/,
exclude: /(node_modules)/,
use: [
{
loader: 'ts-loader',
options: {
appendTsSuffixTo: [/\.vue$/]
// transpileOnly: true,
}
},
{
loader: 'tslint-loader',
options: {
configFile: 'tslint.json',
emitErrors: true,
}
}
]
})
defaultConfig.module.rules.push({ test: /\.less$/, loaders: [ 'style-loader', 'css-loader', 'less-loader' ] })
defaultConfig.module.rules.push({ test: /\.scss$/, loaders: [ 'style-loader', 'css-loader', 'sass-loader' ] })
defaultConfig.module.rules.push({ test: /\.styl$/, loader: 'style-loader!css-loader!stylus-loader' })
defaultConfig.plugins.push(new ForkTsCheckerWebpackPlugin())
return defaultConfig
}
ïŒ4379ã«ãããšãVueåºæã®åé¿çã¯TSLintã³ã¢ã«å°éã§ããªããªããŸãã
ããã§ã®è°è«ãå ·äœçãªææ¡ãäžè¶³ããŠãããESLintïŒïŒ4534ïŒãæ¯æããTSLintã®éæšå¥šãè¿ã¥ããŠããããšãèæ ®ããŠãããŠã¹ããŒãã³ã°ã®ç®çã§ãã®åé¡ãšé¢é£ããVueåºæã®ã¬ããŒããéããŸãã
ãããtypescript-eslintã§ãŸã åé¡ã§ããå Žåã¯ãããã§åé¡ãæåºããããšããå§ãããŸãã é 匵ã£ãŠãã ããïŒ
./node_modules/.bin/wotan'src / * / .vue '-f verbose
ã¯ã©ãã·ã¥ïŒ
Error: ENOENT: no such file or directory, open '/home/andrew/PycharmProjects/djangochat/fe/src/components/App.vue.ts'
at Object.openSync (fs.js:451:3)
at detectEncoding (/home/andrew/PycharmProjects/djangochat/fe/node_modules/tslint/lib/rules/encodingRule.js:67:17)
at walk (/home/andrew/PycharmProjects/djangochat/fe/node_modules/tslint/lib/rules/encodingRule.js:49:20)
at Rule.AbstractRule.applyWithFunction (/home/andrew/PycharmProjects/djangochat/fe/node_modules/tslint/lib/language/rule/abstractRule.js:39:9)
at Rule.apply (/home/andrew/PycharmProjects/djangochat/fe/node_modules/tslint/lib/rules/encodingRule.js:33:21)
at R.apply (/home/andrew/PycharmProjects/djangochat/fe/node_modules/@fimbul/bifrost/src/index.js:30:40)
at Linter.applyRules (/home/andrew/PycharmProjects/djangochat/fe/node_modules/@fimbul/wotan/src/linter.js:209:31)
at Linter.getFindings (/home/andrew/PycharmProjects/djangochat/fe/node_modules/@fimbul/wotan/src/linter.js:125:25)
at Runner.lintFiles (/home/andrew/PycharmProjects/djangochat/fe/node_modules/@fimbul/wotan/src/runner.js:159:43)
at lintFiles.next (<anonymous>) {
errno: -2,
syscall: 'open',
code: 'ENOENT',
path: '/home/andrew/PycharmProjects/djangochat/fe/src/components/App.vue.ts'
}
@akoidan tslintã§ã¯ãªããwotanãããžã§ã¯ãã§ãã®ãããªåé¡ãæèµ·ããŠãã ãã
æãåèã«ãªãã³ã¡ã³ã
ããã«ããå°ããã¥ãŒã¹ããããŸããïŒ ð€