HumanReadableLogs.coffee 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. define [
  2. "libs/latex-log-parser"
  3. "ide/human-readable-logs/HumanReadableLogsRules"
  4. ], (LogParser, ruleset) ->
  5. parse : (rawLog, options) ->
  6. if typeof rawLog is 'string'
  7. parsedLogEntries = LogParser.parse(rawLog, options)
  8. else
  9. parsedLogEntries = rawLog
  10. _getRule = (logMessage) ->
  11. return rule for rule in ruleset when rule.regexToMatch.test logMessage
  12. seenErrorTypes = {} # keep track of types of errors seen
  13. for entry in parsedLogEntries.all
  14. ruleDetails = _getRule entry.message
  15. if (ruleDetails?)
  16. if ruleDetails.ruleId?
  17. entry.ruleId = ruleDetails.ruleId
  18. else if ruleDetails.regexToMatch?
  19. entry.ruleId = 'hint_' + ruleDetails.regexToMatch.toString().replace(/\s/g, '_').slice(1, -1)
  20. if ruleDetails.newMessage?
  21. entry.message = entry.message.replace ruleDetails.regexToMatch, ruleDetails.newMessage
  22. # suppress any entries that are known to cascade from previous error types
  23. if ruleDetails.cascadesFrom?
  24. for type in ruleDetails.cascadesFrom
  25. entry.suppressed = true if seenErrorTypes[type]
  26. # record the types of errors seen
  27. if ruleDetails.types?
  28. for type in ruleDetails.types
  29. seenErrorTypes[type] = true
  30. entry.humanReadableHint = ruleDetails.humanReadableHint if ruleDetails.humanReadableHint?
  31. entry.extraInfoURL = ruleDetails.extraInfoURL if ruleDetails.extraInfoURL?
  32. # filter out the suppressed errors (from the array entries in parsedLogEntries)
  33. for key, errors of parsedLogEntries when typeof errors is 'object' and errors.length > 0
  34. parsedLogEntries[key] = (err for err in errors when not err.suppressed)
  35. return parsedLogEntries