Skip to content

Commit 343d410

Browse files
authored
Merge pull request postcss#101 from gucong3000/error_details
Error details
2 parents e572833 + f7535b8 commit 343d410

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

index.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,12 @@ module.exports = withConfigLoader(function (loadConfig) {
7979
function handleError (error) {
8080
var errorOptions = { fileName: file.path, showStack: true }
8181
if (error.name === 'CssSyntaxError') {
82-
error = error.message + '\n\n' + error.showSourceCode() + '\n'
82+
errorOptions.error = error
83+
errorOptions.fileName = error.file || file.path
84+
errorOptions.lineNumber = error.line
85+
errorOptions.showProperties = false
8386
errorOptions.showStack = false
87+
error = error.message + '\n\n' + error.showSourceCode() + '\n'
8488
}
8589
// Prevent stream’s unhandled exception from
8690
// being suppressed by Promise

test.js

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,19 @@ it('should correctly wrap postcss errors', function (cb) {
5353
stream.on('error', function (err) {
5454
assert.ok(err instanceof gutil.PluginError)
5555
assert.equal(err.plugin, 'gulp-postcss')
56+
assert.equal(err.column, 1)
57+
assert.equal(err.lineNumber, 1)
58+
assert.equal(err.name, 'CssSyntaxError')
59+
assert.equal(err.reason, 'Unclosed block')
5660
assert.equal(err.showStack, false)
57-
assert.equal(err.fileName, 'testpath')
61+
assert.equal(err.source, 'a {')
62+
assert.equal(err.fileName, path.resolve('testpath'))
5863
cb()
5964
})
6065

6166
stream.write(new gutil.File({
6267
contents: new Buffer('a {'),
63-
path: 'testpath'
68+
path: path.resolve('testpath')
6469
}))
6570

6671
stream.end()
@@ -75,14 +80,15 @@ it('should respond with error on stream files', function (cb) {
7580
assert.ok(err instanceof gutil.PluginError)
7681
assert.equal(err.plugin, 'gulp-postcss')
7782
assert.equal(err.showStack, true)
78-
assert.equal(err.fileName, 'testpath')
83+
assert.equal(err.message, 'Streams are not supported!')
84+
assert.equal(err.fileName, path.resolve('testpath'))
7985
cb()
8086
})
8187

8288
var streamFile = {
8389
isStream: function () { return true },
8490
isNull: function() { return false },
85-
path: 'testpath'
91+
path: path.resolve('testpath')
8692
};
8793

8894
stream.write(streamFile)
@@ -149,12 +155,19 @@ it('should correctly generate relative source map', function (cb) {
149155
describe('PostCSS Guidelines', function () {
150156

151157
var sandbox = sinon.sandbox.create()
152-
var CssSyntaxError = function (message, sourceCode) {
158+
var CssSyntaxError = function (message, source) {
153159
this.name = 'CssSyntaxError'
154160
this.message = message
155-
this.sourceCode = sourceCode
161+
this.source = source
156162
this.showSourceCode = function () {
157-
return this.sourceCode
163+
return this.source
164+
}
165+
this.toString = function(){
166+
var code = this.showSourceCode();
167+
if ( code ) {
168+
code = '\n\n' + code + '\n';
169+
}
170+
return this.name + ': ' + this.message + code;
158171
}
159172
}
160173
var postcssStub = {
@@ -404,12 +417,13 @@ describe('PostCSS Guidelines', function () {
404417
it('should not output js stack trace for `CssSyntaxError`', function (cb) {
405418

406419
var stream = postcss([ doubler ])
407-
var cssSyntaxError = new CssSyntaxError('message', 'sourceCode')
420+
var cssSyntaxError = new CssSyntaxError('messageText', 'sourceCode')
408421
postcssStub.process.returns(Promise.reject(cssSyntaxError))
409422

410423
stream.on('error', function (error) {
411424
assert.equal(error.showStack, false)
412-
assert.equal(error.message, 'message' + '\n\nsourceCode\n')
425+
assert.equal(error.message, 'messageText\n\nsourceCode\n')
426+
assert.equal(error.source, 'sourceCode')
413427
cb()
414428
})
415429

0 commit comments

Comments
 (0)