ফাইল আপেক্ষিক eslint এক্সিকিউটেবল সঙ্গে ফ্লাই চেক


21

এসেলিন্ট প্লাগইনগুলির একটি কাস্টম সেট সহ আমি অনেকগুলি প্রকল্প ডেভিনির্ভরতা হিসাবে এস্লিন্ট ইনস্টল করতে কাজ করি। এই মুহুর্তে, ফ্লাইচেক প্রতিটি প্রকল্পের সাথে ইনস্টল করা এস্লিন্টের সংস্করণের পরিবর্তে বিশ্বব্যাপী ইনস্টলিন্টের ইনস্টলড সংস্করণ ব্যবহার করে।

আমি পরিবর্তে নোড_মডিউলগুলি / এসলিন্ট / বিন / এসলিন্ট.জেজে ফ্লাইচেক পয়েন্ট তৈরি করতে চাই। সম্পূর্ণ পাথটি বর্তমান বাফারের ফাইলের পথের উপর নির্ভর করতে হবে যাতে আমি প্রতিটি বাফারের সাথে একই সাথে একাধিক প্রকল্পের উপর কাজ করতে পারি সম্ভাব্য ভিন্ন এসলিন্ট এক্সিকিউটেবল ব্যবহার করে।

এটা কি সম্ভব? আমি কীভাবে এটি করতে যাব তার জন্য কোনও পরামর্শ?

উত্তর:


32

আপনি কর্মসূচী পরিবর্তন করতে পারেন flycheck-javascript-eslint-executable, যেমন

(defun my/use-eslint-from-node-modules ()
  (let* ((root (locate-dominating-file
                (or (buffer-file-name) default-directory)
                "node_modules"))
         (eslint
          (and root
               (expand-file-name "node_modules/.bin/eslint"
                                 root))))
    (when (and eslint (file-executable-p eslint))
      (setq-local flycheck-javascript-eslint-executable eslint))))

(add-hook 'flycheck-mode-hook #'my/use-eslint-from-node-modules)

এই কোডটি node_modulesবাফার ডিরেক্টরিটির কোনও পিতামাতার একটি ডিরেক্টরি সন্ধান করে এবং যদি কোনও উপস্থিত থাকে তবে সেই ডিরেক্টরি থেকে এক্সিকিউটেবল একটি এস্লিন্ট ব্যবহার করতে ফ্লাইচকে কনফিগার করে।


আমি আশা করি আমার ইমাস-ফু ভাল ছিল। উত্তরের জন্য ধন্যবাদ!
প্যাকার্ডুন

1
আপনার যদি গ্লোবাল-ফ্লাইচেক-মোড সেট থাকে, তবে আমি প্রস্তাব দিই যে (and eslint (file-executable-p eslint)) আমি অন্যথায় চেষ্টা করার অর্থ, যেমন আমার
.emacs

আপনার যদি একটি ইনলাইন হুক প্রয়োজন হয় তবে আপনি যা করতে পারেন তা এখানে (এবং কাস্টম ফাংশনগুলি এড়াতে): emacs-fu.blogspot.in/2008/12/hooks.html
শিভেক খুরানা

সুরক্ষা দ্রষ্টব্য: কেবলমাত্র বিশ্বস্ত ফোল্ডার / প্রকল্পগুলিতে ফাইলগুলি খুলুন; আপনি যেকোনো দূষিত এসলিন্ট বাইনারি
ম্যাক্সী

2
আমি পথটি ব্যবহার করব "node_modules/.bin/eslint", যদি কেবল এস্লিন্ট তাদের ডিরেক্টরি কাঠামো পরিবর্তন করে।
কোডি রিচার্ট

3

গৃহীত সমাধান সম্পর্কে মন্তব্য করার মতো যথেষ্ট খ্যাতি আমার নেই। তবে আমি এটির বিভিন্নতা করেছি, যা নেস্টেড প্যাকেজগুলির সাথে ভাল কাজ করে (উদাহরণস্বরূপ লার্না ব্যবহার করে )। এটি হুবহু একই কোড, তবে এটি বাইনারি node_modulesখুঁজে না পাওয়া eslintএবং এটি ব্যবহার না করা অবধি প্যারেন্ট ফোল্ডারটিকে পুনরাবৃত্তভাবে দেখায় । এই উপায়ে, আপনার কাছে লর্না প্রকল্পের একটি মাত্র এসলিন্ট কনফিগারেশন থাকতে পারে, যা সমস্ত উপ-প্যাকেজগুলির মধ্যে ভাগ করা থাকে।

(defun my/use-eslint-from-node-modules ()
  (let ((root (locate-dominating-file
               (or (buffer-file-name) default-directory)
               (lambda (dir)
                 (let ((eslint (expand-file-name "node_modules/eslint/bin/eslint.js" dir)))
                  (and eslint (file-executable-p eslint)))))))
    (when root
      (let ((eslint (expand-file-name "node_modules/eslint/bin/eslint.js" root)))
        (setq-local flycheck-javascript-eslint-executable eslint)))))
(add-hook 'flycheck-mode-hook #'my/use-eslint-from-node-modules)

0

আমি উইন্ডোতে রয়েছি এবং এটি আমার পক্ষে কাজ করছে না, আমি মনে করি ফাইল এক্সিকিউটেবল-পি বা সম্ভবত ফ্লাই চেক ইন্টার্নালগুলি সঠিক ফাইলটি সনাক্ত করতে ব্যর্থ হয়েছিল। এটি যখন কাজ করছে তখন এটি .cmdফাইলটির দিকে নির্দেশ করছে এবং ফাইলটি নয় .js

আমি ফ্লাইচেক-এস্লিন্টে একটি মন্তব্য পেয়েছি জাভাস্ক্রিপ্ট প্রকল্পে ইনস্টল করা এস্লিন্টের সংস্করণ এবং তাদের ব্লগ পোস্টের পরিবর্তে ডিরেক্টরি পরিবর্তনশীলগুলি ব্যবহার করতে ব্যবহার করে না।

প্রকল্পের মূল ডিরেক্টরিতে একটি ফাইল তৈরি করুন .dir-locals.el

((nil . ((eval . (progn
                   (add-to-list 'exec-path (concat (locate-dominating-file default-directory ".dir-locals.el") "node_modules/.bin/")))))))

এখন আমি যখন জাভাস্ক্রিপ্ট ফাইলটি ভিজিট করি তখন ফাইলটি flycheck-verify-setupসঠিকভাবে সন্ধান করে<dir>/node_modules/.bin/eslint.cmd


0

আমার আগের সমাধানটি বিভিন্ন প্রকল্পে কাজ করার জন্য ব্যথা হয়েছিল।

আমি হার্ড কোড উইন্ডোজ বোকামীদের গ্রহণযোগ্য উত্তরটি পরিবর্তন করেছি।

(defun my/use-eslint-from-node-modules ()
  (let* ((root (locate-dominating-file
                (or (buffer-file-name) default-directory)
                "node_modules"))
         (eslint (and root
                      (expand-file-name "node_modules/.bin/eslint.cmd"
                                        root))))
    (when (and eslint (file-exists-p eslint))
      (setq-local flycheck-javascript-eslint-executable eslint))))

0

এখানে এমন একটি সমাধান রয়েছে যা প্রকল্পের মূল ডিরেক্টরিতে (বা, বিশেষত, ডিরেক্টরিতে যেখানে বাইনারি থাকে সেখানে ফোল্ডারে থাকা ডিরেক্টরিতে ) ডিরেক্টরিটির একটি ফাইল ব্যবহার করে বায়ে এবং লুনারিওরনের উত্তরগুলি একত্রিত করে । নিম্নলিখিত বিষয়বস্তু দিয়ে ফাইল তৈরি করুন ।dir-locals.elnode_modules/eslintdir-locals.el

((js2-mode
   (flycheck-checker . javascript-eslint)
   (eval . (setq-local flycheck-javascript-eslint-executable
             (concat (locate-dominating-file default-directory
                       ".dir-locals.el") "node_modules/.bin/eslint")))))

এখানে আমি ধরে নিচ্ছি যে আপনি js2-modeজাভাস্ক্রিপ্ট ফাইলগুলি সম্পাদনা করতে ইম্যাক্স মুখ্য মোডটি ব্যবহার করছেন । যদি এটি না হয় তবে সেই লাইনটি সেই অনুযায়ী পরিবর্তন করুন। ফাইলের দ্বিতীয় লাইনটি javascript-eslintসিন্ট্যাক্স পরীক্ষককে কেবল এই প্রকল্পের মধ্যে ব্যবহার করতে সক্ষম করে। তৃতীয় লাইনটি পরিবর্তনশীল সেট করে flycheck-javascript-eslint-executableকরতে <root-dir>/node_modules/.bin/eslint। এইভাবে আমরা ইম্যাকগুলি সংশোধন করি না exec-path


0

আমি এর কয়েকটি বিভিন্ন প্রকারের চেষ্টা করেছি এবং আমি যা চাইছিলাম ঠিক তা পাইনি। এটিকে আমার পছন্দ অনুসারে পরিবর্তন করতে আমি ইমাস লিস্পে শেষ পর্যন্ত যথেষ্ট পরিমাণে সমতল করেছি। আমার সংস্করণটি যা করে তা হ'ল স্থানীয় এসিলিন্টের সন্ধান এবং যদি এটির সন্ধান না পাওয়া যায় তবে এটি বিশ্বব্যাপী ইনস্টল হওয়াটিতে ফিরে আসে:

(defun configure-web-mode-flycheck-checkers ()
    ;; See if there is a node_modules directory
    (let* ((root (locate-dominating-file
                  (or (buffer-file-name) default-directory)
                  "node_modules"))
           (eslint (or (and root
                            ;; Try the locally installed eslint
                            (expand-file-name "node_modules/eslint/bin/eslint.js" root))

                       ;; Try the global installed eslint
                       (concat (string-trim (shell-command-to-string "npm config get prefix")) "/bin/eslint"))))

      (when (and eslint (file-executable-p eslint))
        (setq-local flycheck-javascript-eslint-executable eslint)))

    (if eslint
        (flycheck-select-checker 'javascript-eslint)))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.