質問: ### 前提・実現したいこと ruby初心者です。 atomパッケージでlinter、およびlinter-rubyをインストールし、コードの静的解析を行いつつ学習を進めています。 ### 発生している問題・エラーメッセージ ソースコードに日本語が含まれる際、日本語部分がlinter-rubyにerror判定されてしまいます。 error判定されないようにしたいです。 #### 該当ソース ``` def func "あああ" end p func ``` #### エラーメッセージ("あああ"行に表示) ``` unexpected end-of-input, expecting keyword_end ``` ![linter-ruby](https://teratail.storage.googleapis.com/uploads/contributed_images/10314f28e73a608bf586a56e46445c22.png) ### 試したこと encodeが原因かと思い調査しましたが、ファイルはutf-8で保存されており、atom上もutf-8で開いているため問題ないと思われます。 また、ターミナルで上記ファイルを実行した場合は、エラーは発生せず正常に「あああ」が出力されます。 また、関連性があるかは不明ですが、atomパッケージ「atom-runnner」で上記コードを実行すると、「あ」が「\u3042」に変換されて出力されます。 ![atom-runner](https://teratail.storage.googleapis.com/uploads/contributed_images/e036ff477364aba3af610e71f3a1b3d3.png) ### 補足情報(言語/FW/ツール等のバージョンなど) * OSX Sierra(10.12.2) * Ruby 2.3.3(rbenvでバージョン管理) * rbenv 1.1.0 よろしくお願いいたします。
回答: 下記のissueに該当するliter-ruby自体の不具合と思われます。 utf-8 strings and unexpected end-of-input · Issue #103 · AtomLinter/linter-ruby 解決方法としては ``` # encoding: utf-8 ``` などを先頭に追加してください(Rubyが認識できる方式なら何でもいいはずです)。 【解説】 Rubyでは2.0からデフォルトのエンコードがUTF-8になりました(それまではASCII-7bitsでした)。そのため、UTF-8でソースコードを書く場合は、先頭にエンコード指定が不要になりました。で、linter-rubyですが、これ自体は内部でRubyのコマンドを実行しており、古いRubyも想定していたのか、内部で実行時にUTF-8として見に行くようにコマンドラインで指定していました。なにやら、この指定がおかしくなったらしく、逆に、UTF-8として認識されないという現象が起きるようになってしました。 ファイル自体のエンコード指定をすれば、linter-rubyは正しくUTF-8として見に行けるようになるため、現象は改善されます。そのうち修正されるかと思いますが、現状はエンコード指定をファイルに先頭に書く以外に回避方法はありません。