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 14, 2015
1 parent 5bde93f commit 71c2364
Show file tree
Hide file tree
Showing 4 changed files with 103 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.

87 changes: 87 additions & 0 deletions lib/main.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
{CompositeDisposable} = require 'atom'
helpers = require 'atom-linter'
path = require 'path'
_ = require 'lodash'
qFs = require 'q-io/fs'
q = require 'q'
qTmpFile = q.denodeify require('tmp').file

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, ':'

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

deactivate: ->
@subscriptions.dispose()

provideLinter: ->
provider =
grammarScopes: ['source.python']
scope: 'file'
lintOnFly: true
lint: (activeEditor) =>
return @writeTmpFile(activeEditor.getText()).then (tmpFilename) =>
file = activeEditor.getPath()
projDir = @getProjDir(file)
cwd = projDir
pythonPath = @pythonPath.replace(/%p/g, projDir)
env = _.merge {}, process.env,
PYTHONPATH: _.compact([process.env.PYTHONPATH, projDir, pythonPath]).join(':')
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}).then (output) =>
_.reject helpers.parse(output, @regex, {filePath: file}), {type: 'info'}

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

writeTmpFile: (contents) ->
qTmpFile({}).spread (filename) ->
qFs.write filename, contents
filename
19 changes: 16 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,26 @@
{
"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.1.1",
"lodash": "^3.10.1",
"q": "^1.4.1",
"q-io": "^1.13.1",
"tmp": "0.0.26"
}
}

0 comments on commit 71c2364

Please sign in to comment.