The code linting framework for Sublime Text 3

Overview

SublimeLinter

tests

The code linting framework for Sublime Text. No linters included: get them via Package Control.

Installation

Install SublimeLinter and linters via Package Control.

Settings

Settings are mostly documented in the default settings. When you open the SublimeLinter settings you'll see them on the left.

  • Additional information is in our docs at sublimelinter.com.
  • Read about all the changes between 3 and 4 here.

Quick Actions (beta)

We're building a new feature called Quick Actions, that will allow you to quickly ignore specific error messages. At first SublimeLinter will ship actions for eslint, stylelint, flake8, mypy and phpcs.

Want to see actions for your favourite linter? Please open a PR with your addition to quick_fix.py. We have some tests you can add to as well.

Eventually, as this feature becomes more stable, we will expose it as an API so that plugins can add their own actions.

Key Bindings

SublimeLinter comes with some pre-defined keyboard shortcuts. You can customize these via the Package Settings menu.

Command Linux & Windows MacOS
Lint this view CTRL + K, L CTRL + CMD + L
Show all errors CTRL + K, A CTRL + CMD + A
Goto next error CTRL + K, N CTRL + CMD + E
Goto prev error CTRL + K, P CTRL + CMD + SHIFT + E

Support & Bugs

Please use the debug mode and include all console output, and your settings in your bug report. If your issue is specific to a particular linter, please report it on that linter's repository instead.

Creating a linter plugin

Fork the template to get started on your plugin. It contains a howto with all the information you need.

Comments
  • Passing the torch

    Passing the torch

    After a year of working on SublimeLinter, the time has come for me to pass the torch. I am grateful to everyone who valued SublimeLinter enough to donate, and also to those who contributed code, but I can no longer afford to maintain or support SublimeLinter and its many linter plugins.

    I am looking for developers who are willing to take over coding and/or support. If you are interested, please leave a comment here.

    opened by aparajita 114
  • env: node: No such file or directory

    env: node: No such file or directory

    Hi, I cannot get get my eslint working anymore

    SublimeLinter: #3 SublimeLinter.sublime-package:747: 'eslint' is linting 'Service.js' SublimeLinter: #3 SublimeLinter.sublime-package:1045: eslint: Service.js ['/Users//Sites/project/node_modules/.bin/eslint', '--format', 'json', '--stdin', '--stdin-filename', '/Users//Sites/project/services/Service.js'] SublimeLinter: #3 SublimeLinter.sublime-package:1048: eslint: cwd: /Users//Sites/project SublimeLinter: #3 SublimeLinter.sublime-package:774: eslint output: env: node: No such file or directory SublimeLinter: #3 SublimeLinter-eslint.sublime-package:54: ERROR: env: node: No such file or directory

    $which eslint /usr/local/bin/eslint

    $ which node /usr/local/bin/node

    could you give an hint?

    questions & setup 
    opened by Warin 69
  • WIP: Support linter messages from multiple files

    WIP: Support linter messages from multiple files

    This enables support to show messages from multiple files correctly. For example clang-tidy can be configured to also show messages from files that are included in the linted file. Right now these messages are treated as coming from the linted file which is confusing and can lead to errors like #1379.

    These changes try to format such messages nicely and make them behave just like messages from the linted file. It is already possible to jump to the mentioned line. Currently it looks like this: grafik

    There are some issues I have found so far:

    • [ ] Columns in other files are always shown as 1
    • [ ] The panel is not updated when navigating other files
    • [ ] Tests are missing

    Some parts of the code are still a bit ugly. For example to get the filename a message refers to it accesses the regex match directly because I couldn't find a practical way to extend the LintMatch tuple.

    It would be great if someone else would be also able to test this or even provide some improvements.

    opened by mheinzler 67
  • NVM: cannot locate 'eslint' / 'node' etc

    NVM: cannot locate 'eslint' / 'node' etc

    After recent update, Sublime always popup the tips:

    SublimeLinter: WARNING: eslint cannot locate 'eslint'.

    In detail:

    I haven't install global eslint, because I have to extend the eslint rules in config file in projects, If using the global eslint, the xxx-eslint-config package is not used.

    When the project is configed properly, and with local eslint installed, everything works very well.

    But if I open a file not in project (in a single window), there always a popup tips in the sublime console.

    In previous versions (not sure which version), no such problem.

    questions & setup :wave: TESTERS WANTED :wave: discussion 
    opened by TooBug 61
  • Fix by ignoring

    Fix by ignoring

    Fixes #1739

    Implement a command which in turn opens a quick panel from where the user can select a specific error "code" aka rule name violated on the line the users cursor currently is. (<-- one sentence)

    The command can be called from the Command Palette "FBI".

    Currently only understands flake8 and mypy errors.

    • [x] just do the fix if there is only one fix
    • [x] if the cursor is on one error only select errors and fixes for that error, probably resulting in an immediate fix if there is only one action available then
    • [x] for selections on one line only select selected errors
    • [x] don't show the help message in the footer if none of the errors actually has a fix
    • [x] disable command for multiple cursors/selections
    • [x] for eslint, if you select a block, t.i. multiple lines, suggest a disable/enable block
    • [x] add stylelint which is basically the same as eslint but maybe has some other domain preferences. For example the preferred mode is probably disable this line here.
    • [x] better quick fix label/description text
    • [x] sort actions in the quick panel
    opened by kaste 60
  • Honor custom error types when counting for the status bar

    Honor custom error types when counting for the status bar

    Fixes #1726

    ~~We now count [w]arnings, [e]rrors and all [o]ther types. Also make "non-errors" available as the sum of warnings and others. Trivially add "total" for the total sum.~~

    ~~The counter template switches to named variables (e.g. {total}) from the limited positional filling. T.i. we switch from a tuple as data format to a dict.~~

    ~~The default format uses non-errors in-place of warnings to avoid the case that both shown counters are zero but the panel still shows "problems", for example "notes" or "suggestions".~~

    Completely revamped above approach during design phase. Consider reading the full thread.

    Redesign status bar widget. Deprecate "statusbar.counters_template" setting. The setting is unused now.

    :eyes: 
    opened by kaste 52
  • SublimeLinter doesn't recognize linters installed with NVM

    SublimeLinter doesn't recognize linters installed with NVM

    I have a few linters installed with NVM (jshint, csslint) and Sublime Linter won't recognize them. I've added the path to my settings but according to my console SublimeLinter is still looking in the wrong place.

    Here's my SublimeLinter settings. https://gist.github.com/ec03df57e48eac45263b

    opened by wldcordeiro 48
  • No linters are showing errors

    No linters are showing errors

    Hi. I'm having a strange problem getting SublimeLinter to work, and I was wondering whether someone here could help.

    A few weeks ago all of my linters (pylint and jshint, mainly) stopped detecting errors in open files. I have tried adding deliberate errors to both js and python files, but when use the command palette to "Show All Errors" a popup appears saying "No Lint Errors". I've checked, and jshint is installed and does detect the deliberately-introduced errors when run from the command line. Additionally, the Sublime Text log shows that jshint is being loaded successfully (see below). pylint is also being loaded correctly.

    SublimeLinter: jshint version query: /usr/local/bin/jshint --version 
    SublimeLinter: jshint version: 2.7.0 
    SublimeLinter: jshint: (>= 2.5.0) satisfied by 2.7.0 
    SublimeLinter: jshint activated: /usr/local/bin/jshint 
    
    SublimeLinter: pylint version query: /usr/local/bin/python /usr/local/bin/pylint --version 
    SublimeLinter: pylint version: 1.4.0 
    SublimeLinter: pylint: (>= 1.0) satisfied by 1.4.0 
    SublimeLinter: pylint activated: ('/usr/local/bin/python', '/usr/local/bin/pylint') 
    

    Attached is a screenshot showing the issue. screen shot 2015-04-20 at 11 31 55 am

    Best, Charles

    opened by dawsonc 40
  • no highlighting of errors and can't set gutter style

    no highlighting of errors and can't set gutter style

    Eslint just auto-upgraded to version 4.0.1 and now I don't see any highlighting of where errors are in the line; previously they were clearly marked with a red outline. The icons in the gutter are white when they used to be red, yellow etc. The status bar text no longer tells me what my errors are. I've looked at the upgrade notes and have tried to set gutter style but it didn't make any difference. Can you give clear instructions on how to get back to a usable linting style after the upgrade?

    questions & setup 
    opened by Shelagh-Lewins 39
  • Support Yarn Plug'n'Play

    Support Yarn Plug'n'Play

    This is more of a feature request. When working on a project that uses Yarn's Plug'n'Play (PnP) feature to manage dependency resolution SublimeLinter complains that it cannot find eslint ..

    SublimeLinter: WARNING: Skipping 'eslint' for now which is listed as a devDependency in C:\Path\To\package.json but not installed. Forgot to 'npm install'?

    I suppose the current implementation depends on the presence of a local node_modules folder?

    enhancement upstream :eyes: 
    opened by HusamIbrahim 37
  • show_panel_on_save if errors in view or window + make it lazy

    show_panel_on_save if errors in view or window + make it lazy

    Fixes #1084 by introducing a setting to show the output panel if there are problems:

    "show_panel_on_save"

    • Set to "window" to check if the window has problems.
    • Set to "view" to only check the current file/buffer.
    • Set to "never" to disable this feature. This is the default.

    Additional changes to fix #1163

    • [x] panel is not created until the user does so manually
    • [x] the panel and its state aren't updated if the panel doesn't exist
    • [ ] make next_result work as soon as you open the panel
    • [ ] clean up the panel if it's no longer in use
    opened by braver 37
  • Find `project_root` for python linters

    Find `project_root` for python linters

    Two pull request (from the same person though) have been made to search a "project root" for python projects and set the working dir to it. (We do this for node based linters but there the file package.json is basically mandatory so it is an easy play.)

    As always we look at ale which looks for these names, as usual going upwards the path starting with the filename.

      MANIFEST.in
      setup.cfg
      pytest.ini
      tox.ini
      .pyre_configuration.local
      mypy.ini
      .mypy.ini
      pycodestyle.cfg
      .flake8
      .flake8rc
      pylama.ini
      pylintrc
      .pylintrc
      pyrightconfig.json
      pyrightconfig.toml
      Pipfile
      Pipfile.lock
      poetry.lock
      pyproject.toml
      .tool-versions
    

    https://github.com/dense-analysis/ale/blob/e4b20544082ba019d8095cbc24ffab43b15e8fc0/doc/ale-python.txt#L36-L55

    Also from there just copy the possible venv names ale checks for reference:

    .env
    .venv
    env
    ve-py3
    ve
    virtualenv
    venv
    

    https://github.com/dense-analysis/ale/blob/e4b20544082ba019d8095cbc24ffab43b15e8fc0/autoload/ale/python.vim#L10

    Note that ale also checks for the first directory not having a __init__.py file iff the above fails. (So it may go upwards the path twice.)

    https://github.com/SublimeLinter/SublimeLinter-pylint/pull/66 https://github.com/SublimeLinter/SublimeLinter-mypy/pull/53

    We can of course also use the strategy to deploy only on a specific python linter for testing and then re-integrate into SL core.

    opened by kaste 1
  • Setting to set maximum line or file size

    Setting to set maximum line or file size

    Hi there,

    first of all thanks for SublimeLinter, really helpful plugin!

    Today I worked with a >50k lines and over nearly 3MB huge file (better don't ask..) and noticed that rubocop was eating really much CPU (although I reeally didn't want to touch that file at all ;-)). I didn't find an option to limit the maximum file/line size for the linters. Is there one?

    Otherwise I'd like to bring this up as feature idea.

    Cheers!

    opened by themilkman 3
  • Errors loading linter

    Errors loading linter

    Having an issue loading the linter. I see the output from the console saying no module names jsonschema, but when i yum install that, yum tells me its already installed.

    sudo yum install python-jsonschema
    Loaded plugins: aliases, changelog, kabi, langpacks, ovl, product-id, search-disabled-repos, tmprepo, verify,
                  : versionlock
    Loading support for Red Hat kernel ABI
    Package python2-jsonschema-2.5.1-4.el7.noarch already installed and latest version
    Nothing to do
    

    Error from plugin:

    .config/sublime-text/Packages/SublimeLinter/lint/settings.py", line 6, in <module>
        from jsonschema import validate, FormatChecker, ValidationError
    ImportError: No module named 'jsonschema'
    

    Further errors down the console:

    .config/sublime-text/Packages/SublimeLinter/lint/settings.py", line 4, in <module>
        from . import events, util
    ImportError: cannot import name events
    
    opened by corporatedigger 7
  • `get_tempfile_suffix` uses the setting `syntax_map` so I can't remove it

    `get_tempfile_suffix` uses the setting `syntax_map` so I can't remove it

    The setting syntax_map has been deprecated. We have some help text in the settings file but this text is misleading because the setting isn't used anymore to select linters for a given view. (We only use selector or scopes for this.)

    But we still use syntax_map in the tempfile suffix code. For example haskell defines

        tempfile_suffix = {
            'haskell': 'hs',
            'haskell-sublimehaskell': 'hs',
            'literate haskell': 'lhs'
        }
    

    It has a mapping from syntax (which is the base or stem (=name without suffix in Python terminology)) to the file extension (suffix in Python land) used when generating tempfiles.

    So the users uses 'Packages/Haskell/Haskell.sublime-syntax' for its view, and therefore we use "hs" as the tempfile suffix.
    But if the user writes literal haskell bird style (LiterateHaskellBirdStyle) must be mapped to lhs but the syntax is not in the mapping.

    The user can now define

        "syntax_map": {
            "literatehaskellbirdstyle": "literate haskell"
        }
    

    to make it work. So we map from our used syntax, to the one defined in the plugin code, which maps finally to the wanted extension.

    Nobody does that because it is way too complicated. Esp. that we first map to literate haskell is pure magic, the user must lookup the source code.

    Anyhow that's the wanted legacy functionality.

    Ideally we could lookup and ask Sublime Text which is a (or the) typical extension for this syntax/language. Or we at least had a direct mapping from used syntax or base scope (source.haskell.bird) to extension.

    discussion 
    opened by kaste 0
  • multiple linters How to set individually

    multiple linters How to set individually

    i have many linters e.g php,phpmd。but I do not want each that β€œshow_panel_on_save:view” ;

    i want setting like the following. all default "show_panel_on_save:viewβ€œ ,linters.phpmd setting "show_panel_on_save:neverβ€œ

    图片

    There are also ”.pdependβ€œ folder that keep adding up until the disk is full, and I have to delete it

    enhancement discussion 
    opened by DMC-HYX 1
  • No place to put a CA Certificate

    No place to put a CA Certificate

    I have a .rubocop.yml file that has a link out to a shared style guide for all our projects. But am unable to find a place to put a CA Cert. I tried to put a CA PEM in Package Control.user-ca-bundle but that didn't work.

    inherit_from:
      - https://pages.github.enterprise-website.com/my-team/style-guide/rubocop.yml
    

    SublimeLinter results:

    SublimeLinter: #2012 linter.py:1226   ruby: output:
      Syntax OK
    SublimeLinter: #2012 linter.py:1266   ruby: No matches for regex: ^(?P<file>.+?):(?P<line>\d+): (?:(?P<error>.*?error)|(?P<warning>warning))[,:] (?P<message>[^\r\n]+)\r?\n(?:^[^\r\n]+\r?\n^(?P<col>.*?)\^)?
    SublimeLinter: #2011 linter.py:808    WARNING: rubocop output:
    SSL_connect returned=1 errno=0 state=error: certificate verify failed (self signed certificate in certificate chain)
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/2.5.0/net/protocol.rb:44:in `connect_nonblock'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/2.5.0/net/protocol.rb:44:in `ssl_socket_connect'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/2.5.0/net/http.rb:985:in `connect'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/2.5.0/net/http.rb:920:in `do_start'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/2.5.0/net/http.rb:909:in `start'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/2.5.0/net/http.rb:1458:in `request'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/remote_config.rb:49:in `block in request'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/remote_config.rb:61:in `generate_request'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/remote_config.rb:48:in `request'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/remote_config.rb:22:in `file'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/config_loader.rb:185:in `file_path'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/config_loader.rb:39:in `load_file'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/config_loader_resolver.rb:214:in `block in base_configs'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/config_loader_resolver.rb:213:in `map'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/config_loader_resolver.rb:213:in `base_configs'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/config_loader_resolver.rb:25:in `resolve_inheritance'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/config_loader.rb:51:in `load_file'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/config_loader.rb:103:in `configuration_from_file'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/config_store.rb:68:in `for_dir'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/config_store.rb:58:in `for'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/target_finder.rb:190:in `block in process_explicit_path'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/target_finder.rb:189:in `reject'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/target_finder.rb:189:in `process_explicit_path'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/target_finder.rb:40:in `block in find'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/target_finder.rb:36:in `each'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/target_finder.rb:36:in `find'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/runner.rb:77:in `find_target_files'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/runner.rb:42:in `run'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/cli/command/execute_runner.rb:26:in `block in execute_runner'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/cli/command/execute_runner.rb:52:in `with_redirect'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/cli/command/execute_runner.rb:25:in `execute_runner'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/cli/command/execute_runner.rb:17:in `run'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/cli/command.rb:11:in `run'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/cli/environment.rb:18:in `run'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/cli.rb:71:in `run_command'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/cli.rb:78:in `execute_runners'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/lib/rubocop/cli.rb:47:in `run'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/exe/rubocop:12:in `block in <top (required)>'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/2.5.0/benchmark.rb:308:in `realtime'
    /Users/arian/.rvm/rubies/ruby-2.5.8/lib/ruby/gems/2.5.0/gems/rubocop-1.23.0/exe/rubocop:12:in `<top (required)>'
    /Users/arian/.rvm/gems/ruby-2.5.8@myapp/bin/rubocop:23:in `load'
    /Users/arian/.rvm/gems/ruby-2.5.8@myapp/bin/rubocop:23:in `<main>'
    
    questions & setup 
    opened by arianf 3
Releases(4.20.1)
  • 4.20.1(Dec 20, 2022)

  • 4.20.0(Sep 30, 2022)

    Finally, I mean: f i n a l l y, we have annotation and inline phantoms[*].

    -- By default, nothing changes, you have to opt-in.

    Here's how it goes as it is a bit tricky and also sophisticated:

    ++ Everything is configured within the styles section in the global SublimeLinter settings. For that to work, the style definitions accept two new keys, namely annotation and phantom.

    These are template strings, therefore e.g. "{code}", "{msg}", "{linter}" are typical values used here. Use "" (the default) to turn this feature off.

    Because this is implemented as "style" of an error, you can adjust and fine-tune the feature for each linter separately. (°°)

    This is extremely important to reduce clutter and noise where possible. Because, believe me, this can lead to clutter and noise.

    For example, while writing, you often produce intermittent syntax errors. But that is natural for writing and shouldn't produce too much visual distraction. You can for example define

    "mypy": {
        "styles": [
            {
                "codes": ["syntax"],  # mypy's rule/code for syntax errors
                "icon": "cog",
                "phantom": "",        # no inline phantoms
                "annotation": "πŸ’£",   # an icon on the right side
            },
            {
                "phantom": "{msg}",   # for all other reported problems
            }
        ],
    },
    

    to mitigate this effect.

    E.g. for "annotations", everything is already pretty much in the code. You could try:

    "annotations": {
        "styles": [
            {
                "types": ["error"],
                "scope": "region.redish",
                "annotation": "!"
            },
            {
                "annotation": "",
                "phantom": ""
            },
        ]
    },
    

    Especially phantoms are both annoying and the best thing since sliced bread. So we only show them for "errors" (not for "warnings" etc) as long as there are any errors and only then also for warnings and other types. Yeah, that should probably be pluggable but then I would never release anything.

    To quickly toggle the phantoms you can use our sublime_linter_toggle_highlights command. By default it toggles both the squiggles and the inline phantoms but: --

    { "keys": ["ctrl+k", "ctrl+k"],
      "command": "sublime_linter_toggle_highlights",
      "args": {"what": ["phantoms"]}  // or "squiggles"
    },
    

    -- this is already pluggable.

    Sincerely, ❀️

    And yes, I do drink coffee: https://paypal.me/herrkaste

    [*] Annotations are small text fields on the right hand side of the view at the same line of an error. Because of that they usually have not much space to show anything. Phantoms appear right below the error and use the full width of the view. They make clear what an error is about, have lots of space but - if you have lots of them in a small section - the actual code might get too interspersed.

    Source code(tar.gz)
    Source code(zip)
  • 4.19.0(Sep 9, 2022)

    Howdy,

    --- we slightly refreshed the panel design.

    --- we auto detect more python environments. Typical local installation on ".env" or ".venv" (where Kenneth' put these) and poetry are supported.

    --- in the styles settings, code is now a prefix match. For example:

        {
            "codes": ["E3", "E2"],
            "scope": "comment",
        },
    

    will match against rules "E302", "E304", ...

    Handy for all linters that organize the rules like hierarchical namespaces, like e.g. rubocop and eslint. (E.g. "prettier/")

    --- there is now a global on/off switch. This is useful for example for plugins with special views. For example, GitSavvy now lints the commit message views which was not possible before as these scratch, temporary, widget-like views were always skipped.

    But you can also turn SublimeLinter off on a per project basis.

    {
        "folders": [{ "path": "." }],
        "settings": {
            "SublimeLinter.enabled?": false,
        }
    }
    

    --- and a spelling fixer for the codespell linter

    +++ the usual maintenance commits

    https://github.com/SublimeLinter/SublimeLinter/compare/4.18.0...4.19.0 🌐

    Source code(tar.gz)
    Source code(zip)
  • 4.18.0(Dec 6, 2021)

  • 4.17.0(Jun 10, 2021)

    Mostly shipping maintenance, we have two notable changes for plugins:

    • Beside the obvious line and col you can now capture end_line and end_col in the regexes. The low level LintMatch usually used with JSON formats also understands these keys of course.

    • If a plugin wants to log something, no need to import logging; ... anymore, as there is a configured self.logger now.

      As a reminder:

      • self.logger.info("message") only emits in debug mode
      • self.logger.warning("message") always emits to Sublime's builtin console
      • self.logger.error("message") popups a panel (usually don't!)

    https://github.com/SublimeLinter/SublimeLinter/compare/4.16.3...4.17.0

    Source code(tar.gz)
    Source code(zip)
  • 4.16.3(May 17, 2021)

    Minor fixes

    • Teach our settings validator to allow arbitrary error types (#1792)
    • Ensure to skip file-on-disk linters on unnamed buffers (#1793)
    Source code(tar.gz)
    Source code(zip)
  • 4.16.2(Aug 21, 2020)

  • 4.16.0(Aug 3, 2020)

    Introducing Quick Actions

    We're building a new feature to quickly ignore specific error messages. In this release we ship actions for eslint, stylelint, flake8, mypy and phpcs.

    You can access the feature for example by right clicking on an error, or using the Command Palette SublimeLinter: Quick Action.

    For more information please refer to our README: https://github.com/SublimeLinter/SublimeLinter

    Want to see actions for your favourite linter? Please open a PR with your addition to quick_fix.py: https://github.com/SublimeLinter/SublimeLinter/blob/master/lint/quick_fix.py

    Source code(tar.gz)
    Source code(zip)
  • 4.15.0(May 19, 2020)

    • Redesign the status bar widget (#1730). As a result the setting "statusbar.counters_template" is now unused and deprecated. For "clean" files, the error panel will show which linters are running.

    • Support long linter error messages consisting of multiple lines. The error panel and the tooltips will format such multiline messages nicely. (#1735) Also all views now properly support custom error types. (#1730, #1735)

    • Hard deprecate persist.debug and persist.debug_mode functions. These were already not used in any public linter package registered with Package Control. (#1723) Export lint.PermanentError and lint.TransientError for plugin authors. (#1724)

    https://github.com/SublimeLinter/SublimeLinter/milestone/16 https://github.com/SublimeLinter/SublimeLinter/compare/4.14.0...4.15.0

    Source code(tar.gz)
    Source code(zip)
  • 4.14.0(Nov 20, 2019)

    • Panel focuses around the active file #1681
    • Goto commands participate in Sublime's move-history #1677

    Small fixes and improvements as always.

    https://github.com/SublimeLinter/SublimeLinter/milestone/12 https://github.com/SublimeLinter/SublimeLinter/compare/4.13.2...4.14.0

    Source code(tar.gz)
    Source code(zip)
  • 4.13.2(Oct 21, 2019)

    • Performance optimizations for the views
    • Small edge case fix for the panel file/line regexes which we register to handle mouse double clicking on results.

    https://github.com/SublimeLinter/SublimeLinter/milestone/14 https://github.com/SublimeLinter/SublimeLinter/compare/4.13.1...4.13.2

    Source code(tar.gz)
    Source code(zip)
  • 4.13.1(Sep 26, 2019)

    • Minor bugfixes

    https://github.com/SublimeLinter/SublimeLinter/milestone/13 https://github.com/SublimeLinter/SublimeLinter/compare/4.13.0...4.13.1

    Source code(tar.gz)
    Source code(zip)
  • 4.13.0(Sep 24, 2019)

    • @mheinzler continued his work on multi-file-linters: linters that follow imports or report errors from multiple files in one go.

      Plugin authors interested in this feature should capture and report filename, either automatically using a named group in their regex, or manually when yielding a LintMatch.

    • @HusamIbrahim rewrote the executable lookup algorithm for NodeLinter. We now support eslint v6, the new yarn pnp mode, lerna.

      • You need yarn v1.8 or even yarn berry for pnp mode. Thanks to @arcanis who is the tech lead of yarn for answering our questions and quickly merging a PR.
    • The setting 'kill_old_processes' now defaults to True. The setting controls whether SublimeLinter actively kills processes whose results are already outdated, e.g. because the view changed in the meantime.

      This should save CPU time and battery. We've been testing this for a while and there doesn't seem to be a negative impact, so it's time to flip the switch.

    For more info: https://github.com/SublimeLinter/SublimeLinter/milestone/11 https://github.com/SublimeLinter/SublimeLinter/compare/4.12.0...4.13.0

    Source code(tar.gz)
    Source code(zip)
  • 4.12.0(Jul 23, 2019)

    • Improved errors tooltip: Now wraps long lines Easily copy the error messages to you clipboard thanks to @kylebebak πŸ’

    • Deprecations: We've previously pushed a number of deprecation warnings, those deprecations are now in full effect. Some new warnings (mostly for features you shouldn't be using anyway) have been added. Background info for plugin developers can be found here: https://github.com/SublimeLinter/SublimeLinter/pull/1613 and: https://github.com/SublimeLinter/SublimeLinter/milestone/7?closed=1

    Source code(tar.gz)
    Source code(zip)
  • 4.11.1(Apr 25, 2019)

Owner
Code and documentation for SublimeLinter, the linter eco-system for Sublime Text
null
Emmet for Sublime Text

This plugin is deprecated and no longer maintained, please use new version. Emmet for Sublime Text Official Emmet plugin for Sublime Text. How to inst

Sergey Chikuyonok 5.3k Jan 5, 2023
Enhancements to Sublime Text sidebar. Files and folders.

Sidebar Enhancements In other languages Japanese - http://taamemo.blogspot.jp/2012/10/sublime-text-2-sidebarenhancements.html?m=1 Russian - https://ww

Tito 2.1k Dec 27, 2022
Integrates the Trix Editor with Laravel. Inspired by the Action Text gem from Rails.

Integrates the Trix Editor with Laravel. Inspired by the Action Text gem from Rails. Installation You can install the package via composer: composer r

Tony Messias 267 Jan 4, 2023
Laravel package to convert English numbers to Bangla number or Bangla text, Bangla month name and Bangla Money Format

Number to Bangla Number, Word or Month Name in Laravel | Get Wordpress Plugin Laravel package to convert English numbers to Bangla number or Bangla te

Md. Rakibul Islam 50 Dec 26, 2022
Laravel package to convert English numbers to Bangla number or Bangla text, Bangla month name and Bangla Money Format

Number to Bangla Number, Word or Month Name in Laravel | Get Wordpress Plugin Laravel package to convert English numbers to Bangla number or Bangla te

Md. Rakibul Islam 50 Dec 26, 2022
An online communication application that provides a real-time or live transmission of text messages from sender to receiver.

Realtime-chat-application An online communication application that provides a real-time or live transmission of text messages from sender to receiver.

isha 2 Aug 15, 2022
πŸ”Œ Convert Bootstrap CSS code to Tailwind CSS code

Tailwindo This tool can convert Your CSS framework (currently Bootstrap) classes in HTML/PHP (any of your choice) files to equivalent Tailwind CSS cla

Awssat 938 Dec 24, 2022
Framework - πŸ™ƒ Phony. Real-like Fake Data Generation Framework

?? Framework This repository contains the ?? Phony Framework. ?? Start generating fake data with ?? Phony Framework, visit the main Phony Repository.

Phonyland 5 Oct 31, 2022
Automatic multi-tenancy for Laravel. No code changes needed.

Tenancy for Laravel β€” stancl/tenancy Automatic multi-tenancy for your Laravel app. You won't have to change a thing in your application's code. βœ”οΈ No

Samuel Ε tancl 2.7k Jan 3, 2023
Laravel Code Tips

Laravel Code Tips This project is a simple Laravel application that uses: Ryan Chandler's Orbit package for storing data in markdown files, custom com

ARCHTECH 67 Dec 14, 2022
Boilerplate code for protecting a form with proof of work. Uses javascript in the browser to generate the hashcash and PHP on the server to generate the puzzle and validate the proof of work.

Boilerplate code for protecting a form with proof of work. Uses javascript in the browser to generate the hashcash and PHP on the server to generate the puzzle and validate the proof of work.

Jameson Lopp 28 Dec 19, 2022
This package provides convenient methods for making token code, sending and verifying mobile phone verification requests.

Laravel Mobile Verification Introduction Many web applications require users to verify their mobile phone numbers before using the application. Rather

M.Fouladgar 347 Dec 25, 2022
A collection of extensions for Laravel development in Visual Studio Code

Laravel Extension Pack for Visual Studio Code Includes the basic extensions to get started with Laravel development in Visual Studio Code. Laravel Ext

Winnie Lin 24 Dec 25, 2022
A Laravel Code Generator based on your Models using Blade Template Engine

Laravel Code Generator is a PHP Laravel Package that uses Blade template engine to generate code for you. The difference between other code generators

Victor Yoalli 59 Dec 5, 2022
Laracast's awesome larabook tutorial - refreshed with Laravel 5.0 code

Larabook Updated - Laravel 5.0 A light version of Facebook, called Larabook. Updated using new techniques and features of Laravel 5.0 Fixes I tried my

Mike Wu 6 Dec 6, 2020
Laravel 4.* and 5.* service providers to handle PHP errors, dump variables, execute PHP code remotely in Google Chrome

Laravel 4.* service provider for PHP Console See https://github.com/barbushin/php-console-laravel/releases/tag/1.2.1 Use "php-console/laravel-service-

Sergey 73 Jun 1, 2022
Blacksmith is a code generation tool which automates the creation of common files that you'd typically create for each entity in your application.

Blacksmith is a code generation tool which automates the creation of common files that you'd typically create for each entity in your application.

Indatus 197 Dec 30, 2022
Source code behind the Laracasts Larabit: Creating and Using Custom Blade Directives

This is the source code behind the Laracasts Larabit: Creating and Using Custom Blade Directives, and features all of the files and code available in that video.

Andrew Schmelyun 1 Nov 12, 2021
laravel-vat is a package that contains the Laravel related wiring code for ibericode/vat

laravel-vat is a package that contains the Laravel related wiring code for ibericode/vat, helping you deal with VAT legislation for businesses based in the EU.

Danny van Kooten 117 Dec 5, 2022