Skip to content

feat(lint): let attributes be functions#112

Merged
xiaoshihou514 merged 1 commit intonvimdev:mainfrom
MoritzBoehme:json-attributes-functions
Oct 8, 2023
Merged

feat(lint): let attributes be functions#112
xiaoshihou514 merged 1 commit intonvimdev:mainfrom
MoritzBoehme:json-attributes-functions

Conversation

@MoritzBoehme
Copy link
Copy Markdown

This change is prompted by a change in the python linter ruff. The json output has changed a bit and the severity no longer simply parsed. Example:

import random
[
  {
    "code": "F401",
    "message": "`random` imported but unused",
    "fix": {
      "applicability": "Unspecified",
      "message": "Remove unused import: `random`",
      "edits": [
        {
          "content": "",
          "location": {
            "row": 1,
            "column": 1
          },
          "end_location": {
            "row": 2,
            "column": 1
          }
        }
      ]
    },
    "location": {
      "row": 1,
      "column": 8
    },
    "end_location": {
      "row": 1,
      "column": 14
    },
    "filename": "/tmp/tmp.zV0Bmo7zZd/tmp.py",
    "noqa_row": 1
  }
]

By making all attributes in from_json a function or a key to the json message table, we can again extract the severity.
The new ruff config would be something like this:

{
  cmd = "ruff",
  args = {
    "-n",
    "-e",
    "--format",
    "json",
    "-",
    "--stdin-filename",
  },
  fname = true,
  stdin = true,
  parse = lint.from_json({
    attributes = {
      severity = function(js)
        return string.sub(js["code"], 1, 1) -- first character
      end,
      lnum = function(js)
        return js["location"]["row"]
      end,
      col = function(js)
        return js["location"]["column"]
      end,
    },
    severities = {
      E = lint.severities.error, -- pycodestyle errors
      W = lint.severities.warning, -- pycodestyle warnings
      F = lint.severities.info, -- pyflakes
      A = lint.severities.info, -- flake8-builtins
      B = lint.severities.warning, -- flake8-bugbear
      C = lint.severities.warning, -- flake8-comprehensions
      T = lint.severities.info, -- flake8-print
      U = lint.severities.info, -- pyupgrade
      D = lint.severities.info, -- pydocstyle
      M = lint.severities.into, -- Meta
    },
    source = "ruff",
  }),
}

I have tested this on my machine, but as this is part of https://github.com/nvimdev/guard-collection I didn't add or alter any test in this repo. Let me know what you think about this change :)

Comment thread lua/guard/lint.lua Outdated
or mes[opts.attributes.lnum]
local col = type(opts.attributes.col) == 'function' and opts.attributes.col(mes)
or mes[opts.attributes.col]
local message = type(opts.attributes.message) == 'function' and opts.attributes.message(mes)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe separate the logic into a function since it appears many times

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, good call 👍

Copy link
Copy Markdown
Member

@xiaoshihou514 xiaoshihou514 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems great! Makes api more consistent

@MoritzBoehme MoritzBoehme force-pushed the json-attributes-functions branch from 862b634 to 44742eb Compare October 8, 2023 09:56
@xiaoshihou514 xiaoshihou514 merged commit 17e8884 into nvimdev:main Oct 8, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants