osyo-manga / vim-precious

Vim context filetype
117 stars 7 forks source link

Unknown filetype vue-something in .vue #17

Closed aiya000 closed 5 years ago

aiya000 commented 5 years ago

.vue中のscript lang="ts"のTypeScriptで行数を多くし、かつ戻り値にPromise<something>を指定すると、その行より下に行った際にvue-somethingというファイルタイプが設定されます :(

謎のファイルタイプなので、シンタックスハイライトが消失し…… x)

再現

<template>
    <Label text="hi" />
</template>

<script lang="ts">
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a
// a

class Foo {
  public async f(): Promise<void> {}
}

function bar(): void {}
</script>
aiya000 commented 5 years ago

// aは行数を増やすためのダミーで、実際はimportやclass内でのメソッド定義などで行数が増えた場合などに、問題がおきます :joy:

osyo-manga commented 5 years ago

ありがとうございます。 詳しくはみてないんですが、おそらく context_filetype.vimここら辺 の設定で意図しない filetype として認識されているのかあ、と思います。 該当する行で :echo context_filetype#get() を呼ぶとわかりやすいと思います。

aiya000 commented 5 years ago

ありがとうございます! public async f(): Promise<void> {}の行で実行したところ

{'range': [[0, 0], [0, 0]], 'filetype': 'vue'}

とのことで、その1つ下の行で実行すると

{'range': [[0, 0], [0, 0]], 'filetype': 'vue-void'}

とのことでした。

とりあえず、こんなワークアラウンドで解決してみましたw

augroup vimrc
  autocmd User PreciousFileType call s:dont_enter_vue_promise()
augroup END

function! s:dont_enter_vue_promise() abort
  if context_filetype#get()['filetype'] =~# '^vue-'
    call precious#switch('typescript')
  endif
endfunction

P.S.
僕はNativeScript-Vueっていうのでvue.jsに触れているのですが、preciousが<template>部ではhtmlに・script lang="ts"部ではtypescriptに設定してくれて、満足です。
つまるところ、vue-fooっていうファイルタイプって、なんのことだろう? って感じなので、もしかしたら、不要なのかも……?
(すみません、よくわかっていません。)

aiya000 commented 5 years ago

ところで、こんなに素敵なプラグインをありがとうございます! NativeScript-Vueを書く上で、と〜〜っても助かっております 🕶

osyo-manga commented 5 years ago

とりあえず、こんなワークアラウンドで解決してみましたw

なるほど。基本的に filetype まわりの設定は context_filetype.vim に依存しているので、この手の問題は context_filetype.vim 側で対処するべきかな、とは思っています。

つまるところ、vue-fooっていうファイルタイプって、なんのことだろう? って感じなので、もしかしたら、不要なのかも……? 導入された経緯はこれっぽいですね https://github.com/Shougo/context_filetype.vim/issues/38

ところで、こんなに素敵なプラグインをありがとうございます!

ありがとうございます :)

osyo-manga commented 5 years ago

あ、あと g:context_filetype#filetypes でユーザ側でカスタマイズ出来るのでそっちで対応してもいいかもしれません。

aiya000 commented 5 years ago

助かりました、ありがとうございます :pray: context_filetype.vim問題っぽいので、closeします :D