On the fly syntax checking for GNU Emacs

Overview

Flycheck

License GPL 3 Join the chat MELPA MELPA stable version Build Status

https://www.flycheck.org

Modern on-the-fly syntax checking extension for GNU Emacs. Try it!

For a more gentle introduction read the Installation instructions and go through Quickstart guide.

Please ask questions about Flycheck on Stack Exchange or in our Gitter chat, and report bugs to our issue tracker.

We welcome all kinds of contributions, whether you write patches, open pull requests, write documentation, help others with Flycheck issues, or just tell other people about your experiences with Flycheck. Please take a look at our Contributor’s Guide for help and guidance about contributing to Flycheck.

We strive to create a safe, friendly and welcoming environment in the Flycheck community and have a Code of Conduct that defines acceptable and welcome behaviour as well as sanctions for violations. All contributors and all participants are expected to follow it, on Github, Gitter, Emacs.SX or any other place that’s part of Flycheck’s broader community.

Flycheck is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Flycheck is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Comments
  • php-phpcs checker doesn't list errors when flycheck-php-phpcs-executable is 1.4.2

    php-phpcs checker doesn't list errors when flycheck-php-phpcs-executable is 1.4.2

    Hi, with flycheck 0.22, the php-phpcs checker doesn't run on buffer.

    First I run flycheck-select-checker and choose php-phpcs. When I run flycheck-next-error, I get 'No more Flycheck errors.'

    I have verified this by running Emacs -Q and only requiring the php-mode and flycheck packages.

    However, if I run C-c ! C-c php-phpcs (run syntax checker as compile command) I get the proper phpcs output output:

    https://gist.github.com/dhaley/645fde60cb730396d393

    What could be the cause of the syntax checker not running on the buffer. Let me know what other info I can provide. Here are a few other of my settings:

    % phpcs --version PHP_CodeSniffer version 2.0.0RC5 (beta) by Squiz (http://www.squiz.net)

    % phpcs -i The installed coding standards are MySource, PEAR, PHPCS, PSR1, PSR2, Squiz and Zend

    kind: bug 
    opened by dhaley 60
  • flycheck hangs with eslint

    flycheck hangs with eslint

    I have 80 errors in my file if I run eslint from the command line. I tested with a smaller file (with less errors) and it was fine. Emacs has 0% cpu usage and I don't see eslint in the process manager. I think it's related to eslint since the file opens if I remove eslint from my PATH.

    There's nothing in the message buffer.

    GNU Emacs 24.5.1 (x86_64-w64-mingw32) of 2015-05-16 on KAEL

    kind: bug arch: windows only 
    opened by bbigras 57
  • Add syntax checker for CHICKEN Scheme

    Add syntax checker for CHICKEN Scheme

    This PR adds a syntax checker for CHICKEN Scheme.

    It uses csc to check for syntax errors, and report them accordingly via Flycheck. I followed the example of the Racket checker, meaning Geiser must be running with CHICKEN Scheme implementation for this syntax checker to work.

    This is my first (and I hope not last!) contribution to Flycheck, so please do feel free to point out mistakes or any improvements I need to fix.

    component: checkers 
    opened by manuel-uberti 55
  • Added erlang-rebar3 checker

    Added erlang-rebar3 checker

    I wrote a flycheck checker for erlang projects using rebar3, but when I tried adding it to melpa, they said it was pretty basic, so I should try including it in flycheck, so here I am :D

    As per the suggestion here: https://github.com/melpa/melpa/pull/4342

    component: checkers 
    opened by joedevivo 52
  • Add stylelint checker

    Add stylelint checker

    These changes should enable the css-stylelint checker in css-mode and scss-mode.

    It covers 3 different scenarios:

    1) Normal errors and warnings

    # .stylelintrc.yaml
    rules:
      string-quotes: double
      indentation: [2, { "warn": true }]
    
    /* style.css */
    h1 {
      color: 'red'; /* error: single quote */
        margin: 0 auto; /* warning: wrong intentation */
    }
    

    stylelint output (missing error level information):

    $ stylelint style.css
    2:10    Expected double quotes (string-quotes)
    3:5 Expected indentation of 2 spaces (indentation)
    

    That's why I used the JSON formatter and wrote my own :error-parser

    $ stylelint --formatter json style.css
    [{"source":"style.css","deprecations":[],"errored":true,"warnings":[{"line":2,"column":10,"rule":"string-quotes","severity":"error","text":"Expected double quotes (string-quotes)"},{"line":3,"column":5,"rule":"indentation","severity":"warning","text":"Expected indentation of 2 spaces (indentation)"}]}]
    

    2) Syntax errors

    /* style.css */
    h1 {
      color: 'red; /* syntax error: Unclosed quote */
        margin: 0 auto;
    }
    
    $ stylelint --formatter json style.css
    CssSyntaxError: style.css:2:10: Unclosed quote
    

    3) Configuration errors

    # .stylelintrc.yaml
    # should be rules instead of rles
    rles:
      string-quotes: double
      indentation: [2, { "warn": true }]
    
    $ stylelint --formatter json style.css
    Error: No rules found within configuration. Have you provided a "rules" property?
    

    The :error-filter function adds a line (line number 1) to these errors to be able to show them.

    Questions

    • What is the best way to define this checker for css-mode and scss-mode?
    • What is the best way to use a combination of an :error-parser and some form of :error-patterns?
    • Is it necessary to show the Syntax errors and Configuration Errors or should flycheck just fail if these happen?
    • Should I rather try to create a PR at stylelint that changes their text formatter to output the error level and then create a simple checker that just uses :error-patterns for all 3 scenarios?

    Edit: Connects to #785

    component: checkers status: ready for review 
    opened by PhilippBaschke 50
  • Allow running syntax check after buffer switch

    Allow running syntax check after buffer switch

    This pull request addresses #1297. It does not yet include documentation and tests, since I would first like to ask if there are any technical problems with the patch.

    In particular, we may not want to introduce a dependency on switch-buffer-functions, and instead implement that functionality ourselves (it is only about 20 lines of code).

    component: core status: ready for review 
    opened by raxod502 47
  • Add elixir support via dogma

    Add elixir support via dogma

    This PR adds support for the Elixir language (as discussed in #877). This relies on dogma for syntax checking, and so does not execute the code being checked as elixirc would.

    Edit (@lunaryorn): Connects to #877

    TODO:

    • [x] ~~Add predicate to make sure checker is not loaded when mix dogma is not available.~~
    • [x] Parse dogma's JSON output format.
    • [x] Tests for JSON parsing
    component: checkers 
    opened by kthelgason 45
  • Add current working directory [:cwd] property

    Add current working directory [:cwd] property

    This is a first iteration of trying to implement #312. It give the possibility to add :cwd to the flycheck-define-checker. :cwd can be a fixed path or a function that returns a absolute path. The function is called just before the checker. The default-directory is only changed in the lexical environment of the checker execution. In addition there is a :environment property, where one can define additional environment variables. ie ("var1=value1" "var2=value2")

    Edit: Connects to #312

    opened by s3bs 45
  • Too eager checks (inbetween function calls in single command)

    Too eager checks (inbetween function calls in single command)

    Flycheck does a great job of staying out of your way while typing, waiting for a save or newline to start complaining.

    However, when issuing commands that make several changes to the buffer, it triggers a check inbetween functions. This results in errors reported in valid buffers.

    I recorded a demonstration here: http://ascii.io/a/3202

    Adding a (let (flycheck-mode)) around the command resolves this issue, but only for one command at a time.

    kind: bug 
    opened by magnars 37
  • Flycheck is stuck with custom generic checker

    Flycheck is stuck with custom generic checker

    Hey. I'm trying to write custom generic flycheck checker that works with eglot language server package, as it itself is tied to flymake and its author won't do it himself. I've manually unhardcoded flymake calls in eglot in my local elpa directory (for now) and then ended up with the following code in my init.el:

    (use-package flycheck
      :ensure t
      :init (global-flycheck-mode))
    
    (use-package eglot
      :ensure t
      :config
      (defun my/start-eglot-flycheck (checker callback)
        (defun my/point->line-col (buffer beg)
          (with-current-buffer buffer
            (save-excursion
              (goto-char beg)
              (cons (line-number-at-pos)
                    (- (point)
                       (line-beginning-position))))))
        (defun my/flymake-diagnostic->flycheck-error (diag)
          (pcase-let* ((msg (flymake-diagnostic-text diag))
                       (beg (flymake-diagnostic-beg diag))
                       (buffer (flymake-diagnostic-buffer diag))
                       (`(,line . ,col) (my/point->line-col buffer beg)))
            (flycheck-error-new-at
             line col
             (pcase (flymake-diagnostic-type diag)
               ('eglot-error 'error)
               ('eglot-warning 'warning)
               ('eglot-note 'info))
             msg
             :checker checker)))
        (eglot-flymake-backend
         (lambda (report-action &key region)
             (funcall
              callback 'finished
              (mapcar
               #'my/flymake-diagnostic->flycheck-error
               report-action)))))
      (flycheck-define-generic-checker 'eglot
        "A generic eglot flycheck checker"
        :start #'my/start-eglot-flycheck
        :modes '(python-mode))
      (add-to-list 'flycheck-checkers 'eglot)
      (add-to-list 'flycheck-disabled-checkers 'python-flake8)
      (add-to-list 'flycheck-disabled-checkers 'python-pylint)
      (add-to-list 'flycheck-disabled-checkers 'python-pycompile)
      :hook
      (python-mode . eglot-ensure))
    

    It seems to work all right, I can see error messages from language server in the buffer and error counter on the modeline, but there's one problem. I figured it happens when I type anything in buffer while flycheck (seemingly) is running my custom checker. The problem is that in that situation flycheck somehow gets stuck, error count in the modeline is displayed as "???" (I'm using spaceline to display flycheck error count at the modeline), and M-x flycheck-list-errors displays empty error list even though there are errors displayed in the buffer. I'm not that much of an elisp hacker, so I suppose there's something wrong in my code. Would you please point me at what could be wrong? Does callback passed to :start function require some sort of synchronization or locking?

    Here's additional info:

    • M-x flycheck-verify-setup
    Syntax checkers for buffer models.py in python-mode:
    
    First checker to run:
    
      eglot
        - may enable: yes
    
    Checkers that are compatible with this mode, but will not run until properly configured:
    
      python-flake8 (disabled)
        - may enable:         Automatically disabled!
        - executable:         Found at /home/lock/.pyenv/shims/python
        - configuration file: Not found
        - `flake8' module:    Found at "/usr/lib64/python3.6/site-packages/flake8/__init__.py"
    
      python-pylint (disabled)
        - may enable:         Automatically disabled!
        - executable:         Found at /home/lock/.pyenv/shims/python
        - configuration file: Not found
        - `pylint' module:    Found at "/usr/lib64/python3.6/site-packages/pylint/__init__.py"
    
      python-pycompile (disabled)
        - may enable: Automatically disabled!
        - executable: Found at /home/lock/.pyenv/shims/python
    
      python-mypy (disabled)
        - may enable:         Automatically disabled!
        - predicate:          t
        - executable:         Not found
        - configuration file: Not found
        - next checkers:      python-flake8
    
    Flycheck Mode is enabled.  Use M-x universal-argument C-c ! x to
    enable disabled checkers.
    
    --------------------
    
    Flycheck version: 32snapshot (package: 20190619.1410)
    Emacs version:    26.1
    System:           x86_64-pc-linux-gnu
    Window system:    x
    
    • My OS: Gentoo stable 64-bit
    • M-x emacs-version: GNU Emacs 26.1 (build 1, x86_64-pc-linux-gnu) of 2018-09-29
    • M-x flycheck-version: Flycheck version: 32snapshot (package: 20190619.1410)

    Thanks in advance.

    opened by lockie 36
  • Display errors from other files (#966)

    Display errors from other files (#966)

    This implements the feature requested in #966 and laid out in https://github.com/flycheck/flycheck/pull/970#issuecomment-219734788.

    Now:

    • There's a new column in the error list, called File.

      +  [("File" 6)
      
    • We don't discard errors that don't match the current filename (in flycheck-relevant-error-p):

      -       (or (not file-name) (flycheck-same-files-p file-name (buffer-file-name)))
      
    • We only add overlays for the current buffer in flycheck-add-overlay:

      +  (when (eq (flycheck-error-buffer err) (current-buffer))
      
    • In flycheck-next-error-function, when there are no more errors in the current buffer, we jump to the first error from another file.

    • The flycheck-error-list-goto-error function uses the same function as the previous item, both use a new function flycheck-jump-to-error.

    • We add a new face for filenames, flycheck-error-list-filename, derived from buffer-menu-buffer.

    I don't think this is an automatic merge, but it's a straight-forward one. I tried rebasing against master and it worked, but I was unable to get master to load in my Emacs due to a variety of new dependencies which have been added since I last updated flycheck. 😱 So I don't know if it actually runs on your version. Sorry!

    Anyway, against 778493e from 9 months ago it works fine. 🙊 I have to work on other things related to Intero now, but I hope this makes it upstream.

    Edit (@lunaryorn): Connects to #966

    status: wontfix component: core 
    opened by chrisdone 35
  • `markdown-markdownlint-cli` checker fails with

    `markdown-markdownlint-cli` checker fails with "suspicious state"

    I can't get the markdown-markdown-cli checker working. It seems like flycheck finds the linter, runs it as I'd expect, but then may have some kind of issue interpreting the output. I've read the troubleshooting guide and provided all the debug output below. Any help is appreciated.

    🙏 Thank you so much for working on flycheck, I love it!

    Error

    I'm attempting to use the markdown-markdown-cli checker, but it's giving this error:

    Suspicious state from syntax checker markdown-markdownlint-cli: Flycheck checker markdown-markdownlint-cli returned 1, but its output contained no errors: /Users/standefer/.config/yarn/global/node_modules/ignore/index.js:379
      throw new Ctor(message)
      ^
    
    RangeError: path should be a `path.relative()`d string, but got "../../../../var/folders/bh/c53gkgbj7498ds7c4cn2l0840000gq/T/flycheckh0hWzp/CHANGELOG.md"
        at throwError (/Users/standefer/.config/yarn/global/node_modules/ignore/index.js:379:9)
        at checkPath (/Users/standefer/.config/yarn/global/node_modules/ignore/index.js:398:12)
        at Ignore._test (/Users/standefer/.config/yarn/global/node_modules/ignore/index.js:519:5)
        at Ignore.ignores (/Users/standefer/.config/yarn/global/node_modules/ignore/index.js:564:17)
        at ignoreFilter (/Users/standefer/.config/yarn/global/node_modules/markdownlint-cli/markdownlint.js:252:46)
        at /Users/standefer/.config/yarn/global/node_modules/markdownlint-cli/markdownlint.js:255:81
        at Array.filter (<anonymous>)
        at Object.<anonymous> (/Users/standefer/.config/yarn/global/node_modules/markdownlint-cli/markdownlint.js:255:65)
        at Module._compile (node:internal/modules/cjs/loader:1103:14)
        at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10)
    

    M-x flycheck-verify-setup

    
    First checker to run:
    
      markdown-markdownlint-cli
        - may enable:         yes
        - executable:         Found at /usr/local/bin/markdownlint
        - configuration file: Not found
    
    Checkers that are compatible with this mode, but will not run until properly configured:
    
      markdown-mdl (automatically disabled) reset
        - may enable:         no
        - executable:         Not found
        - configuration file: Not found
    
      proselint (automatically disabled) reset
        - may enable: no
        - executable: Not found
    
      textlint (automatically disabled) reset
        - may enable:         no
        - executable:         Not found
        - configuration file: Not found
        - textlint plugin:    @textlint/markdown
    
    Flycheck Mode is enabled. Use C-u C-c ! x to enable disabled checkers.
    
    --------------------
    
    Flycheck version: 33snapshot (package: 20221213.107)
    Emacs version:    28.2
    System:           x86_64-apple-darwin18.7.0
    Window system:    ns
    

    markdownlint-cli version

    $ /usr/local/bin/markdownlint --version
    0.32.2
    

    M-x flycheck-compile

    The linter errors with CHANGELOG.md are what I'd expect given the state of my code.

    -*- mode: compilation; default-directory: "~/code/tesla/" -*-
    Compilation started at Wed Dec 21 16:04:31
    
    /usr/local/bin/markdownlint /Users/standefer/code/tesla/CHANGELOG.md
    /Users/standefer/code/tesla/CHANGELOG.md:28 MD012/no-multiple-blanks Multiple consecutive blank lines [Expected: 1; Actual: 2]
    /Users/standefer/code/tesla/CHANGELOG.md:29 MD012/no-multiple-blanks Multiple consecutive blank lines [Expected: 1; Actual: 3]
    /Users/standefer/code/tesla/CHANGELOG.md:30 MD012/no-multiple-blanks Multiple consecutive blank lines [Expected: 1; Actual: 4]
    /Users/standefer/code/tesla/CHANGELOG.md:31 MD012/no-multiple-blanks Multiple consecutive blank lines [Expected: 1; Actual: 5]
    
    Compilation exited abnormally with code 1 at Wed Dec 21 16:04:31
    

    Emacs version

    GNU Emacs for Mac OS X - Version 28.2

    M-x emacs-version gives:

    GNU Emacs 28.2 (build 1, x86_64-apple-darwin18.7.0, NS appkit-1671.60 Version 10.14.6 (Build 18G95)) of 2022-09-12
    
    kind: bug 
    opened by aguynamedben 1
  • Ownership of the domain flycheck.org

    Ownership of the domain flycheck.org

    Hello @all

    since 2017 I am the owner of the flycheck.org domain (see #1257).

    I am not really involved in flycheck development anymore and not at all up-to-date of what is going on in the project. Therefore I would like to pass on the baton to someone else (or a foundation etc.). The domain is registered until Nov 19th 2023 so there should be plenty of time to find a solution.

    best regards

    opened by mgudemann 0
  • option to control whether to display error at point after checking

    option to control whether to display error at point after checking

    Hi,

    Currently, if there is an error at the current point of the current buffer, Flycheck will always display it after finishing syntax checking.

    I'm using flycheck-posframe and it is quite inconvenient when the popup window automatically displays and hides the current text (when the error message spans several lines).

    So, I introduced an option flycheck-display-errors-at-point-after-checking in this PR. When it is set to nil, Flycheck will not automatically display the error after finishing syntax checking.

    Can you take a look at this PR and merge it if possible?

    Thanks!

    opened by taquangtrung 1
  • Make command executable of a checker selectable

    Make command executable of a checker selectable

    I'm missing a way to specify the executable of a command for a specific checker in my case the D checker. I would like to be able to switch between dmd and ldmd2.

    As consequence of this I have to maintain to versions of my version of the D checker one; using dmd and one using ldmd2. This is not scalable.

    kind: feature request 
    opened by nordlow 5
  • Why is python -m used for flake8, pylint but not mypy

    Why is python -m used for flake8, pylint but not mypy

    I was looking into https://github.com/flycheck/flycheck/issues/1974 and trying to understand how the python checkers were implemented

    Looking at the code, I see that flake8 and pylint are called using python -m and using the stdin option when enabled. But mypy is called directly as is.

    Is there any reasoning for this? I looked through the issue https://github.com/flycheck/flycheck/issues/1055 but I am still not clear on what advantage you might get by using python -m over just calling the flake8 executable directly?

    @cpitclaudel I would appreciate if you can shed some light on this.

    opened by vikigenius 3
  • Suspicious state from syntax checker emacs-lisp: Flycheck checker emacs-lisp returned 255, but its output contained no errors: Debugger entered--Lisp error: (end-of-file)

    Suspicious state from syntax checker emacs-lisp: Flycheck checker emacs-lisp returned 255, but its output contained no errors: Debugger entered--Lisp error: (end-of-file)

    Hi,

    I'm getting the following whenever flycheck runs on .el files..

    I'm on emacs 28, on windows.

    Is there a way to make it go away? :)

    Thanks!

    Suspicious state from syntax checker emacs-lisp: Flycheck checker emacs-lisp returned 255, but its output contained no errors: Debugger entered--Lisp error: (end-of-file)
      command-line-1(("--directory" "c:/Users/Jonathan/.doom.d/snippets/" "--directory" "c:/Users/Jonathan/.emacs.d/orgnv/" "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." "--directory" "c:/Users/Jonathan/.emacs.d/.local/straight/build-2..." ...))
      command-line()
      normal-top-level()
    
    Suspicious state from syntax checker emacs-lisp: Flycheck checker emacs-lisp returned 255, but its output contained no errors: Debugger entered--Lisp error: (end-of-file)
    
    kind: bug 
    opened by JonatanSahar 2
Releases(32)
  • 32(Mar 28, 2022)

    See the full changelog for more information. The flycheck-32 branch was originally frozen in May 2020.

    Highlights

    • Many checkers and compiler, such as ocaml, rust, eslint, and others, include end-line and end-column information. Flycheck can now highlight the exact region that they report. Authors of checker definitions can use the new :end-line and :end-column arguments in flycheck-error-new, or the new end-line and end-column fields in error patterns. [GH-1400]

    • Errors that checkers return for other files will now be displayed on the first line of the current buffer instead of begin discarded. The error list indicates which file each error came from, and navigation moves automatically moves between files. This change helps with compiled languages, where an error in another file may cause the current file to be considered invalid. Variables flycheck-relevant-error-other-file-show and flycheck-relevant-error-other-file-minimum-level control this behavior. [GH-1427]

    • Flycheck can now draw error indicators in margins in addition to fringes. Margins can contain arbitrary characters and images, not just monochrome bitmaps, allowing for a better experience on high-DPI screens. flycheck-indication-mode controls this behavior, and flycheck-set-indication-mode can be used to automatically adjust the fringes and margins. Additionally, Flycheck's will now use high-resolution fringe bitmaps if the fringe is wide enough [GH-1742, GH-1744]

    • Error highlighting is now configurable, using the new flycheck-highlighting-style variable: instead of applying level-dependent faces (typically with wavy underlines), Flycheck can now insert delimiters around errors, or mix styles depending on how many lines an error covers. Additionally, stipples are added in the fringes to indicate errors that span multiple lines. [GH-1743]

    New features and improvements

    • Flycheck can now trigger a syntax check automatically after switching buffers, using the idle-buffer-switch option in flycheck-check-syntax-automatically. This is useful when errors in a file are due to problems in a separate file. Variables flycheck-idle-buffer-switch-delay and flycheck-buffer-switch-check-intermediate-buffers control the functionality. [GH-1297]
    • Flycheck will now use Emacs' native XML parsing when libXML fails. This behavior can be changed by customizing flycheck-xml-parser. [GH-1349]
    • flycheck-verify-setup now shows more clearly which checkers will run in the buffer, and which are misconfigured. [GH-1478]
    • Flycheck now locates checker executables using a customizable function, flycheck-executable-find. The default value of this function allows relative paths (set e.g. in file or dir-local variables) in addition to absolute paths and executable names. [GH-1485]
    • Checkers that report error positions as a single offset from the start of the file can use the new flycheck-error-new-at-pos constructor instead of converting that position to a line and a column. [GH-1400]
    • Config-file variables can now be set to a list of file names. This is useful for checkers like mypy which don't run correctly when called from a subdirectory without passing an explicit config file. [GH-1711]
    • Thanks to algorithmic improvements in error reporting, Flycheck is now much faster in large buffers. [GH-1750]

    New syntax checkers:

    • Awk with gawk [GH-1708]
    • Bazel with bazel-buildifier [GH-1613]
    • CUDA with cuda-nvcc [GH-1508]
    • CWL with schema-salad-tool [GH-1361]
    • Elixir with credo [GH-1062]
    • JSON with json-jq [GH-1568]
    • Jsonnet with jsonnet [GH-1345]
    • MarkdownLint CLI with markdownlint [GH-1366]
    • mypy with python-mypy [GH-1354]
    • Nix with nix-linter [GH-1530]
    • Opam with opam lint [GH-1532]
    • protobuf-prototool with prototool [GH-1591]
    • Rust with rust-clippy [GH-1385]
    • Ruumba with eruby-ruumba [GH-1616]
    • Staticcheck with go-staticheck [GH-1541]
    • terraform with terraform fmt, tflint [GH-1586]
    • Tcl with nagelfar [GH-1365]
    • Text prose with textlint [GH-1534]
    • VHDL with ghdl [GH-1160]

    Checker improvements:

    • python-pylint and python-flake8 are now invoked with python -c, to make it easier to change between Python 2 and Python 3. [GH-1113]
    • Add flycheck-perl-module-list to use specified modules when syntax checking code with the perl checker. [GH-1207]
    • rust-cargo now uses cargo check and cargo test. [GH-1289]
    • Add flycheck-ghc-stack-project-file for the haskell-stack-ghc checker. [GH-1316]
    • Add flycheck-cppcheck-suppressions-file to pass a suppressions file to cppcheck. [GH-1329]
    • Add --force-exclusion flag to rubocop command. [GH-1348]
    • Flycheck now uses ESLint's JSON output instead of checkstyle XML. [GH-1350]
    • Add flychjeck-eslint-args to pass arguments to javascript-eslint. [GH-1360]
    • Flycheck will now execute rubocop from the directory where a Gemfile is located. If a Gemfile does not exist, the old behaviour of running the command from the directory where .rubocop.yml is found will be used. [GH-1368]
    • Add flycheck-sh-bash-args to pass arguments to sh-bash. [GH-1439]
    • haskell-stack-ghc will not try to install GHC anymore. [GH-1443]
    • Add flycheck-ghdl-ieee-library to select which standard IEEE library to use for ghdl. [GH-1547]
    • The javascript-eslint checker now supports typescript-mode by default.
    • Add flycheck-erlang-rebar3-profile to select which profile to use when compiling erlang with rebar3. [GH-1560]
    • Add flycheck-relevant-error-other-file-show to avoid showing errors from other files. [GH-1579]
    • The nix-linter checker now has an error explainer. [GH-1586]
    • The Emacs Lisp checker can now run in buffers not backed by files. [GH-1695]

    Breaking changes

    • Remove the javascript-jscs checker. [GH-1024]
    • Remove the elixir-dogma checker. [GH-1450]
    • rust-cargo now requires Rust 1.17 or newer. [GH-1289]
    • rust now requires 1.18 or newer. [GH-1501]
    • Rename flycheck-cargo-rustc-args to flycheck-cargo-check-args. [GH-1289]
    • rust-cargo does not use the variable flycheck-rust-args anymore. [GH-1289]
    • Improve detection of default directory for haskell-ghc to consider hpack project files. [GH-1435]
    • Replace go tool vet with go vet. [GH-1548]
    • Remove the deprecated go-megacheck checker, which is replaced by go-staticcheck. [GH-1583]

    Many thanks to all the people who contributed for this release 🎉

    Source code(tar.gz)
    Source code(zip)
    flycheck-32.tar(500.00 KB)
  • 31(Oct 7, 2017)

    See the full changelog for more information.

    Breaking changes

    The rust-cargo checker now requires Rust 1.15 or newer. On the other hand, the checker is now capable to test integration tests, examples and benchmarks.

    We have removed the javascript-gjslint checker following the deprecation of the Closure Linter.

    Notable changes

    We have added 10 new checkers: protobuf-protoc, systemd-analyze, nix-instantiate, dockerfile-hadolint, asciidoctor, less-stylelint, ruby-reek, go-megacheck, llvm-llc, and proselint.

    Many thanks to all the people who contributed for this release 🎉

    Source code(tar.gz)
    Source code(zip)
    flycheck-31.tar(420.00 KB)
  • 30(Oct 12, 2016)

    Notable changes:

    • Flycheck now checks Elixir with dogma and Sass/SCSS with sass-lint. Jade support is gone in favour of Pug support, following the renaming of the language.
    • Flycheck can now show explanations for the error under point with C-c ! e—currently support for Rust is included, more to come. The command previously bound to C-c ! e is not bound anymore, use M-x flycheck-set-checker-executable.
    • Flycheck now automatically disables syntax checker which are not available in exec-path, and does not longer attempt to find executables before each syntax check. As such you explicitly need to re-enable a syntax checker with C-u C-c ! x if you install the tool after visiting a file.
    • Using the same infrastructure Flycheck now automatically disables eslint if there is no eslint configuration for the current buffer. This introduces a slight delay when visiting Javascript buffers, but prevents errors from invoking eslint with no configuration. As part of this change support for explicit eslint configuration was removed—eslint's own configuration search is far superior.
    • Likewise the explicit configuration for luacheck was removed as well, in favour of luacheck's own configuration file search, for the same reasons.
    • Syntax checker definitions require :modes now; syntax checkers without :modes signal an error.

    Further information

    Source code(tar.gz)
    Source code(zip)
    flycheck-30.tar(383.50 KB)
  • 29(Aug 28, 2016)

    This release adds a new :working-directory property to syntax checkers which lets syntax checkers control the directory they are invoked from. The Haskell syntax checkers use this feature to run from the project directory if possible.

    Javascript

    This release replaces the option flycheck-eslint-rulesdir with flycheck-eslint-rules-directories which is now a list of rules directories for eslint.

    Rust

    The Rust syntax checkers now require Rust 1.7 or newer, and support the error format of Rust 1.12 and newer.

    Miscellaneous

    For more information please read the changelog.

    Source code(tar.gz)
    Source code(zip)
    flycheck-29.tar(371.50 KB)
  • 28(Jun 5, 2016)

  • 27(May 8, 2016)

    This release brings new syntax checkers for Go, Markdown and TypeScript, and makes the Emacs Lisp Checkdoc syntax checker use any Checkdoc options from your Emacs session.

    The PHP Code Sniffer syntax checker now requires PHP Code Sniffer 2.6 or newer, which is the latest release at the time of writing.

    See the Changelog for more information.

    Source code(tar.gz)
    Source code(zip)
    flycheck-27.tar(357.50 KB)
  • 26(Apr 27, 2016)

    After a longer hiatus it's time for another release which not only brings new languages, features and bug fixes but also is a major step forward for Flycheck as a community project. We now have a Code of Conduct, a new and much improved Contributor's Guide and a Gitter channel for you to ask question and discuss further development of Flycheck.

    From now on we'll release more frequently. The version number will just monotonically increase; we'll still not make any guarantees about backwards compatibility.

    In another major development we're going back to a Sphinx-based website and manual, because Texinfo is too much effort to maintain and write, and to arcane a format to force it upon our contributors. Unfortunately this means that we'll no longer include an Info manual in Flycheck's packages, so you can't read Flycheck's manual in Emacs' Info viewer anymore.

    Please take a look at the Changelog for information about new features and bug fixes.

    Source code(tar.gz)
    Source code(zip)
    flycheck-26.tar(352.00 KB)
  • 0.25.1(Nov 23, 2015)

  • 0.24(Nov 23, 2015)

  • 0.23(Apr 6, 2015)

  • 0.22(Dec 23, 2014)

  • 0.21(Oct 26, 2014)

  • 0.20(Aug 12, 2014)

Owner
Flycheck
On the fly syntax checking for Emacs
Flycheck
Rust development environment for Emacs

Rustic Table of Contents Rustic Intro Installation straight Compilation Faces rustc errors Rustfmt edition 2018 LSP Server Client eglot lsp-mode lsp-e

null 612 Dec 30, 2022
Racer support for Emacs

Racer for Emacs This is the official Emacs package for Racer. Table of Contents Racer for Emacs Completion Find Definitions Describe Functions and Typ

null 398 Nov 30, 2022
Auto-Complete is an intelligent auto-completion extension for Emacs.

Auto-Complete is an intelligent auto-completion extension for Emacs. It extends the standard Emacs completion interface and provides an environment that allows users to concentrate more on their own work.

Emacs Auto-Complete 1.7k Dec 28, 2022
crispmacs is a WIP implementation of Emacs from scratch in Rust.

crispmacs is a WIP implementation of Emacs from scratch in Rust.

rust 3 Jul 31, 2022
Rust On the FLY completion for neovim

rofl.nvim Rust On the FLy completion engine for Neovim. Why Rust? It's 2021. I think the question you should be asking yourself is "Why NOT Rust?!?? (

TJ DeVries 63 Sep 25, 2022
Easy c̵̰͠r̵̛̠ö̴̪s̶̩̒s̵̭̀-t̶̲͝h̶̯̚r̵̺͐e̷̖̽ḁ̴̍d̶̖̔ ȓ̵͙ė̶͎ḟ̴͙e̸̖͛r̶̖͗ë̶̱́ṉ̵̒ĉ̷̥e̷͚̍ s̷̹͌h̷̲̉a̵̭͋r̷̫̊ḭ̵̊n̷̬͂g̵̦̃ f̶̻̊ơ̵̜ṟ̸̈́ R̵̞̋ù̵̺s̷̖̅ţ̸͗!̸̼͋

Rust S̵̓i̸̓n̵̉ I̴n̴f̶e̸r̵n̷a̴l mutability! Howdy, friendly Rust developer! Ever had a value get m̵̯̅ð̶͊v̴̮̾ê̴̼͘d away right under your nose just when

null 294 Dec 23, 2022
syntect is a syntax highlighting library for Rust that uses Sublime Text syntax definitions.

syntect is a syntax highlighting library for Rust that uses Sublime Text syntax definitions. It aims to be a good solution for any Rust project that needs syntax highlighting, including deep integration with text editors written in Rust.

Tristan Hume 1.5k Jan 8, 2023
Count your code by tokens, types of syntax tree nodes, and patterns in the syntax tree. A tokei/scc/cloc alternative.

tcount (pronounced "tee-count") Count your code by tokens, types of syntax tree nodes, and patterns in the syntax tree. Quick Start Simply run tcount

Adam P. Regasz-Rethy 48 Dec 7, 2022
Rust :heart: Emacs

Rust ❤️ Emacs A community-driven port of Emacs to Rust. Table of Contents Why Emacs? Why Rust? Why A Fork? Getting Started Requirements Dockerized dev

Remacs 4.5k Jan 2, 2023
Emacs configuration for Rust

Table of Contents Introduction Installation Melpa Manual installation Feature guide Indentation Code formatting Running / testing / compiling code Cli

The Rust Programming Language 919 Jan 4, 2023
Rust development environment for Emacs

Rustic Table of Contents Rustic Intro Installation straight Compilation Faces rustc errors Rustfmt edition 2018 LSP Server Client eglot lsp-mode lsp-e

null 612 Dec 30, 2022
Racer support for Emacs

Racer for Emacs This is the official Emacs package for Racer. Table of Contents Racer for Emacs Completion Find Definitions Describe Functions and Typ

null 398 Nov 30, 2022
Auto-Complete is an intelligent auto-completion extension for Emacs.

Auto-Complete is an intelligent auto-completion extension for Emacs. It extends the standard Emacs completion interface and provides an environment that allows users to concentrate more on their own work.

Emacs Auto-Complete 1.7k Dec 28, 2022
Emacs client for ycmd, the code completion system.

This package is currently unmaintained! If you want to take over maintenance, let me know in an issue. emacs-ycmd emacs-ycmd is a client for ycmd, the

Austin Bingham 381 Dec 22, 2022
crispmacs is a WIP implementation of Emacs from scratch in Rust.

crispmacs is a WIP implementation of Emacs from scratch in Rust.

rust 3 Jul 31, 2022
This gives Emacs awesome power!

WASI gives Emacs awesome power !! This provides the ability to run WASI: WebAssembly System Interface program on Emacs. This is still in the experimen

pyspa 15 Jan 3, 2023
rust cli project.el clone for those leaving emacs

R-Ject I was a longtime Emacs user and really miss the project management that came with projectile.el and project.el at the same time I was looking f

Cade Michael Lueker 7 Mar 15, 2023
rt-history: An RT-safe history log with error checking

rt-history: An RT-safe history log with error checking This is a bounded wait-free thread synchronization primitive which allows you to record the tim

Hadrien G. 3 Oct 11, 2022
Use explicit container types with Scrypto! Leverage the Rust compiler's type checking to increase security and productivity when developing Radix blueprints.

Scrypto Static Types Use explicit container types with Scrypto! Leverage the Rust compiler's type checking to increase security and productivity when

null 7 Aug 5, 2022
Automated license checking for rust. cargo lichking is a Cargo subcommand that checks licensing information for dependencies.

cargo-lichking Automated license checking for rust. cargo lichking is a Cargo subcommand that checks licensing information for dependencies. Liches ar

Nemo157 120 Dec 19, 2022