Skip to content
This repository has been archived by the owner on Aug 7, 2023. It is now read-only.

Commit

Permalink
Update: Use latest linter API
Browse files Browse the repository at this point in the history
* Use latest atom linter API
* Use helpers from atom-linter
* Refactor to use latest linter plugin conventions (main.coffee, etc.)

Closes #52 #53 #51 #50 #49
  • Loading branch information
SpainTrain committed Aug 17, 2015
1 parent 5bde93f commit 4431f0b
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 74 deletions.
19 changes: 0 additions & 19 deletions lib/init.coffee

This file was deleted.

52 changes: 0 additions & 52 deletions lib/linter-pylint.coffee

This file was deleted.

102 changes: 102 additions & 0 deletions lib/main.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
{CompositeDisposable} = require 'atom'
helpers = require 'atom-linter'
path = require 'path'
_ = require 'lodash'
os = require 'os'

module.exports =
config:
executable:
type: 'string'
default: 'pylint'
description: 'Command or path to executable.'
pythonPath:
type: 'string'
default: ''
description: 'Paths to be added to $PYTHONPATH. Use %p for current project directory (no trailing /).'
rcFile:
type: 'string'
default: ''
description: 'Path to .pylintrc file.'
messageFormat:
type: 'string'
default: '%i %m'
description:
'Format for Pylint messages where %m is the message, %i is the
numeric mesasge ID (e.g. W0613) and %s is the human-readable
message ID (e.g. unused-argument).'

activate: ->
@subscriptions = new CompositeDisposable
@subscriptions.add atom.config.observe 'linter-pylint.executable',
(newExecutableValue) =>
@executable = newExecutableValue
@subscriptions.add atom.config.observe 'linter-pylint.rcFile',
(newRcFileValue) =>
@rcFile = newRcFileValue
@subscriptions.add atom.config.observe 'linter-pylint.messageFormat',
(newMessageFormatValue) =>
@messageFormat = newMessageFormatValue
@subscriptions.add atom.config.observe 'linter-pylint.pythonPath',
(newPythonPathValue) =>
@pythonPath = _.trim newPythonPathValue, path.delimiter

@regex = '^(?<line>\\d+),(?<col>\\d+),\
(?<type>\\w+),\
(\\w\\d+):(?<message>.*)$'

@errorWhitelist = [
/^No config file found, using default configuration$/
]

deactivate: ->
@subscriptions.dispose()

provideLinter: ->
provider =
grammarScopes: ['source.python']
scope: 'file'
lintOnFly: true
lint: (activeEditor) =>
file = activeEditor.getPath()
return helpers.tempFile path.basename(file), activeEditor.getText(), (tmpFilename) =>
projDir = @getProjDir(file)
cwd = projDir
pythonPath = @pythonPath.replace(/%p/g, projDir)
env = Object.create process.env,
PYTHONPATH:
value: _.compact([process.env.PYTHONPATH, projDir, pythonPath]).join path.delimiter
format = @messageFormat
for pattern, value of {'%m': 'msg', '%i': 'msg_id', '%s': 'symbol'}
format = format.replace(new RegExp(pattern, 'g'), "{#{value}}")
args = [
"--msg-template='{line},{column},{category},{msg_id}:#{format}'"
'--reports=n'
'--output-format=text'
]
if @rcFile
args.push "--rcfile=#{@rcFile}"
args.push tmpFilename
return helpers.exec(@executable, args, {env: env, cwd: cwd, stream: 'both'}).then (data) =>
filteredErrors = @filterWhitelistedErrors(data.stderr)
throw new Error(filteredErrors) if filteredErrors
helpers.parse(data.stdout, @regex, {filePath: file})
.filter((lintIssue) ->lintIssue.type isnt 'info')
.map (lintIssue) ->
[[lineStart, colStart], [lineEnd, colEnd]] = lintIssue.range
if lineStart == lineEnd and colStart <= colEnd <= 0
return _.merge {}, lintIssue,
range: helpers.rangeFromLineNumber activeEditor, lineStart, colStart
lintIssue

getProjDir: (filePath) ->
_.find atom.project.getPaths(), (projPath) ->
filePath.indexOf(projPath) == 0

filterWhitelistedErrors: (output) ->
outputLines = _.compact output.split(os.EOL)
filteredOutputLines = _.reject outputLines, (outputLine) =>
_.some @errorWhitelist, (errorRegex) ->
errorRegex.test outputLine

filteredOutputLines.join os.EOL
16 changes: 13 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,23 @@
{
"name": "linter-pylint",
"linter-package": true,
"main": "./lib/init",
"main": "./lib/main",
"version": "0.2.2",
"description": "Lint python on the fly, using pylint",
"repository": "https://github.com/AtomLinter/linter-pylint",
"license": "MIT",
"engines": {
"atom": ">0.50.0"
"atom": ">=1"
},
"dependencies": {}
"providedServices": {
"linter": {
"versions": {
"1.0.0": "provideLinter"
}
}
},
"dependencies": {
"atom-linter": "^3.2.0",
"lodash": "^3.10.1"
}
}

0 comments on commit 4431f0b

Please sign in to comment.