AriaMinaei / pretty-error

See node.js errors with less clutter
MIT License
1.52k stars 48 forks source link

How do I wrap style selector in parenthesis? #25

Closed reggi closed 9 years ago

reggi commented 9 years ago

@AriaMinaei how do I wrap pretty-error > trace > item > footer > addr in parens? I need :before and :after selectors. Are there any other default declarations I can use?

var _ = require('lodash')
var PrettyError = require('pretty-error')
var pe = new PrettyError()

var nullStyle = {
  display: 'inline',
  background: 'none',
  color: 'none',
  bullet: 'none',
  paddingLeft: 0,
  paddingRight: 0,
  paddingBottom: 0,
  paddingTop: 0,
  marginLeft: 0,
  marginRight: 0,
  marginBottom: 0,
  marginTop: 0
}

pe.appendStyle({
  'pretty-error': _.defaults({}, nullStyle),
  'pretty-error > header': nullStyle,
  'pretty-error > header > title > kind': nullStyle,
  'pretty-error > header > colon': _.defaults({
    marginRight: 1
  }, nullStyle),
  'pretty-error > header > message': nullStyle,
  'pretty-error > trace': _.defaults({
    display: 'block',
    marginLeft: 4
  }, nullStyle),
  'pretty-error > trace > item': _.defaults({
    display: 'block',
    bullet: '"at "'
  }, nullStyle),
  'pretty-error > trace > item > header': _.defaults({

  }, nullStyle),
  'pretty-error > trace > item > header > pointer > file': _.defaults({
    display: 'none'
  }, nullStyle),
  'pretty-error > trace > item > header > pointer > colon': _.defaults({
    display: 'none'
  }, nullStyle),
  'pretty-error > trace > item > header > pointer > line': _.defaults({
    display: 'none'
  }, nullStyle),
  'pretty-error > trace > item > header > what': _.defaults({

  }, nullStyle),
  'pretty-error > trace > item > footer': _.defaults({
  }, nullStyle),
  'pretty-error > trace > item > footer > addr': _.defaults({
    // bullet: '"("'
  }, nullStyle),
  'pretty-error > trace > item > footer > extra': nullStyle
})

var e = new Error('Some error message')

var renderedError = pe.render(e)
console.log("///// native error")
console.log(e.stack)
console.log("///// pretty error")
console.log(renderedError)

Is giving me this:

///// native error
Error: Some error message
    at Object.<anonymous> (/Users/thomas/Desktop/node-reggi/z-multi-line.js:78:9)
    at Module._compile (module.js:430:26)
    at Object.Module._extensions..js (module.js:448:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:471:10)
    at startup (node.js:117:18)
    at node.js:953:3
///// pretty error
Error: Some error message
    at Object.<anonymous>/Users/thomas/Desktop/node-reggi/z-multi-line.js:78:9
    at Module._compilemodule.js:430:26
    at Object.Module._extensions..jsmodule.js:448:10
    at Module.loadmodule.js:355:32
    at Function.Module._loadmodule.js:310:12
    at Function.Module.runMainmodule.js:471:10
    at startupnode.js:117:18
    at node.js:953:3
AriaMinaei commented 9 years ago

Yeah renderkid doesn't have :before/:after.

It should be easy to implement though. Let me know how important this feature is to you, and I'll find some time this week to try to implement it.

reggi commented 9 years ago

This solution works for both my issues https://github.com/AriaMinaei/pretty-error/issues/24 and https://github.com/AriaMinaei/pretty-error/issues/25

pe.filter(function (traceLine) {
  if (traceLine.what !== null) {
    traceLine.shortenedAddr = ' (' + traceLine.shortenedAddr + ')'
  }
})

Although it would be nice for renderKid to have support for

  1. :before / :after
  2. not applying styles on null inline elements.

Feel free to close them both.

AriaMinaei commented 9 years ago

Cool. Yeah, it would be nice for renderkid to support psuedoelements, but I think I'd postpone that until someone really needs it.

But the second issue (the inline elements thing) looks like a bug, so I'll look into it.