सिंथेटिक के माध्यम से रिपोर्ट की गई सामान्य लाइनिंग त्रुटियों को ऑटो कैसे ठीक करें?


13

मैंने अपने कोड में लिंट त्रुटियों की रिपोर्ट करने के लिए vim के साथ सिंटैस्टिक प्लगइन का उपयोग करना शुरू कर दिया ।javascript

मैंने सिंटैस्टिक के साथ एस्लिंट को भी एकीकृत किया , और यह मुझे अच्छी त्रुटियों को दिखाता है, मामले में चेतावनी वे मेरे .lintrc फ़ाइल में लिखे गए नियमों के अनुसार मौजूद हैं ।

क्या कोई ऐसा तरीका है जिसमें मैं कुछ सामान्य त्रुटियों को ठीक कर सकता हूं जैसे कि अर्ध-बृहदान्त्र, लापता स्थान आदि को की-स्ट्रोक से गायब करना?

संपादित करें:

मैंने पाया है कि एस्लिंट के पास एक विकल्प है

  --fix Automatically fix problems

जिसका उपयोग ऐसे मामलों के लिए किया जा सकता है। मुझे इस आदेश को चलाने की जरूरत है ताकि उन मुद्दों को हल किया जा सके

eslint --fix -c myconfig file.js

मैं जानना चाहता हूं कि विम के साथ एकीकृत कैसे किया जा सकता है ?


5
1. आपको सिंटैक्स चेकिंग के लिए उस प्लगइन की आवश्यकता नहीं है। 2. ऑटो फिक्सिंग त्रुटियां एक बहुत बुरा विचार है।
रोमेल

1
सभी त्रुटियों के बारे में नहीं मैं त्रुटियों के बारे में बात कर रहा हूँ जैसे कि अंतरिक्ष के आसपास =, अंतरिक्ष के आसपास अगर ब्लॉक, इंडेंटेशन आदि। ये कोड शैलियों से संबंधित त्रुटियां हैं, वास्तविक त्रुटियां नहीं।
विटवॉल्ट

1
संक्षिप्त उत्तर हां है, निश्चित रूप से आप कर सकते हैं। आपको उन विशिष्ट त्रुटियों की तलाश में क्विकफिक्स में लाइनों को पार्स करने के लिए एक कस्टम फ़ंक्शन को परिभाषित करने की आवश्यकता होगी जिन्हें आप उन त्रुटियों के आधार पर ठीक करना चाहते थे और एक कमांड निष्पादित करना चाहते थे। आप आसानी से क्विकफ़िक्स का उपयोग करके प्रत्येक त्रुटि के स्थान पर भी ले जा सकते हैं। आप तब फ़ंक्शन को कीस्ट्रोके में मैप करेंगे। map <C-j> call Function()<CR>लेकिन यह एक बहुत ही कस्टम अनुरूप कार्य होगा जिसे आपको अपनी आवश्यकताओं के अनुरूप लिखना होगा। और रोमैनिल का कहना है कि अगर आप कुछ गलत करते हैं तो आप आसानी से अच्छे से ज्यादा नुकसान कर सकते हैं। सावधानी की सलाह दी जाती है
Tumbler41

1
संगत स्वरूपण लागू करने के लिए एक सुंदर प्रिंटर का उपयोग करें।
lcd047

1
आईडीई सभी किसी न किसी प्रकार के स्वचालित निर्माण का समर्थन करते हैं, मुझे यहां नफरत नहीं समझ में आती। मेरी कंपनी प्री-कमिट हुक का उपयोग करती है eslint --fix, मैं इसके बजाय संपादक स्तर पर बहुत कुछ करना चाहता हूं।
जर्सका

जवाबों:


11

जैसा कि टिप्पणियों में उल्लेख किया गया है कि इस संशोधन से आपको काम के माहौल के बारे में पता चलता है (ठीक-ठीक पता है कि किन नियमों का उपयोग आप "चीजों को ठीक करने" के लिए करते हैं)।

अपने प्रश्न का उत्तर देने के लिए: सिंटैक्टिक के साथ एस्लिंट निष्पादन के विकल्प को जोड़ना सीधे आगे है । बस इसे अपने में जोड़ें .vimrc:

" execute eslint with --fix flag
let g:syntastic_javascript_eslint_args = ['--fix']

लेकिन जैसा कि फ़ाइल में बफर अपने फ़ाइल को बफर लिखने के बाद फ़ाइल पर निष्पादित किया जाता है, विम को ठीक से पता नहीं होता है जो कि एस्क्लिंट करता है। तो किसी तरह विम को फाइल को फिर से लोड करना होगा (मैनुअल तरीका बस :eसामान्य / कमांड मोड में टाइप करना होगा )। ऐसा करने के लिए, हम उपयोग कर सकते हैं autoread साथ मिलकर विकल्प checktime :

" enable autoread to reload any files from files when checktime is called and
" the file is changed
set autoread

चेकटाइम को कॉल करने के लिए हम एक ऑटोकैड का उपयोग कर सकते हैं जो हर बार बफर को फाइल में लिखे जाने पर निष्पादित हो जाता है। लेकिन जैसे-जैसे सिंटैक्टिक उसी घटना पर अपने स्वयं के आटोक्मड का उपयोग कर रहा है, वैसे ही BufWritePostसिंटैक्टिक के स्वयं के जुड़ने के बाद हमें अपना ऑटोकैड जोड़ना होगा। मैंने पाया कि यह वह स्थिति है जब हम अपना ऑटोकैम जोड़ते हैं VimEnter:

" add an autocmd after vim started to execute checktime for *.js files on write
au VimEnter *.js au BufWritePost *.js checktime

इसलिए अपने तीनों हिस्सों को जोड़ने के बाद .vimrcउम्मीद के मुताबिक व्यवहार करें (फाइल सेव पर लिंट और ऑटोकरेक्ट :w)।


7

जेपज़ के उत्तर में दिया गया समाधान मेरे लिए पूरी तरह से काम नहीं कर पाया। विकल्प के eslintसाथ सही ढंग से बुलाया गया था --fix। हालाँकि, हो सकता है कि यह ऐसे इंटर्नल के कारण है जो बदल गया है, लेकिन ऐसा लगता है कि इसे checktimeसमाप्त होने से पहले बुलाया गया था eslint --fix, इसलिए फ़ाइल को पुनः लोड करना ठीक से काम नहीं करता था, file has changed, are you sure you want to write to it?जो अगले सेव पर ट्रिगर होता है ।

हालाँकि, मुद्दों को खोदकर, मैंने एक छिपा हुआ हुक खोजा है जो लगता है कि Syntastic जाँच पूरी होने के बाद ट्रिगर होने लगता है, SyntasticCheckHook( स्रोत )।

इसके साथ, आप checktimeसिंटैस्टिक चेक के चलने के बाद कॉल कर सकते हैं।

यहाँ मेरा अंतिम कोड है:

set autoread

let g:syntastic_javascript_checkers = ['eslint']

" autofix with eslint
let g:syntastic_javascript_eslint_args = ['--fix']
function! SyntasticCheckHook(errors)
  checktime
endfunction

संपादित करें: मैंने व्यक्तिगत रूप से ALEलाइनिंग के लिए स्विच किया है, जो देशी रूप से ऑटोफिक्सिंग का समर्थन करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.