HumanReadableLogs.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /* eslint-disable
  2. max-len,
  3. */
  4. // TODO: This file was created by bulk-decaffeinate.
  5. // Fix any style issues and re-enable lint.
  6. /*
  7. * decaffeinate suggestions:
  8. * DS101: Remove unnecessary use of Array.from
  9. * DS102: Remove unnecessary code created because of implicit returns
  10. * DS207: Consider shorter variations of null checks
  11. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  12. */
  13. import LogParser from 'libs/latex-log-parser'
  14. import ruleset from './HumanReadableLogsRules'
  15. export default {
  16. parse(rawLog, options) {
  17. let parsedLogEntries
  18. if (typeof rawLog === 'string') {
  19. parsedLogEntries = LogParser.parse(rawLog, options)
  20. } else {
  21. parsedLogEntries = rawLog
  22. }
  23. const _getRule = function(logMessage) {
  24. for (let rule of Array.from(ruleset)) {
  25. if (rule.regexToMatch.test(logMessage)) {
  26. return rule
  27. }
  28. }
  29. }
  30. const seenErrorTypes = {} // keep track of types of errors seen
  31. for (let entry of Array.from(parsedLogEntries.all)) {
  32. const ruleDetails = _getRule(entry.message)
  33. if (ruleDetails != null) {
  34. var type
  35. if (ruleDetails.ruleId != null) {
  36. entry.ruleId = ruleDetails.ruleId
  37. } else if (ruleDetails.regexToMatch != null) {
  38. entry.ruleId = `hint_${ruleDetails.regexToMatch
  39. .toString()
  40. .replace(/\s/g, '_')
  41. .slice(1, -1)}`
  42. }
  43. if (ruleDetails.newMessage != null) {
  44. entry.message = entry.message.replace(
  45. ruleDetails.regexToMatch,
  46. ruleDetails.newMessage
  47. )
  48. }
  49. // suppress any entries that are known to cascade from previous error types
  50. if (ruleDetails.cascadesFrom != null) {
  51. for (type of Array.from(ruleDetails.cascadesFrom)) {
  52. if (seenErrorTypes[type]) {
  53. entry.suppressed = true
  54. }
  55. }
  56. }
  57. // record the types of errors seen
  58. if (ruleDetails.types != null) {
  59. for (type of Array.from(ruleDetails.types)) {
  60. seenErrorTypes[type] = true
  61. }
  62. }
  63. if (ruleDetails.humanReadableHint != null) {
  64. entry.humanReadableHint = ruleDetails.humanReadableHint
  65. }
  66. if (ruleDetails.extraInfoURL != null) {
  67. entry.extraInfoURL = ruleDetails.extraInfoURL
  68. }
  69. }
  70. }
  71. // filter out the suppressed errors (from the array entries in parsedLogEntries)
  72. for (let key in parsedLogEntries) {
  73. const errors = parsedLogEntries[key]
  74. if (typeof errors === 'object' && errors.length > 0) {
  75. parsedLogEntries[key] = Array.from(errors).filter(
  76. err => !err.suppressed
  77. )
  78. }
  79. }
  80. return parsedLogEntries
  81. }
  82. }