diff options
| author | Armand Philippot <git@armandphilippot.com> | 2021-12-30 19:47:21 +0100 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2021-12-30 19:47:21 +0100 |
| commit | a98b5ea6fe8e8cc98a55e0fd793e6e8660ea31c1 (patch) | |
| tree | 542810ab5aef99150db228bb54fd58303dcb31c7 /public/prism/prism-javastacktrace.js | |
| parent | ab355897a12b7bda1089a44de326d41455a0f7a3 (diff) | |
chore: add prismjs for syntax highlighting
Diffstat (limited to 'public/prism/prism-javastacktrace.js')
| -rw-r--r-- | public/prism/prism-javastacktrace.js | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/public/prism/prism-javastacktrace.js b/public/prism/prism-javastacktrace.js new file mode 100644 index 0000000..b6ebacd --- /dev/null +++ b/public/prism/prism-javastacktrace.js @@ -0,0 +1,142 @@ +// Specification: +// https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/Throwable.html#printStackTrace() + +Prism.languages.javastacktrace = { + // java.sql.SQLException: Violation of unique constraint MY_ENTITY_UK_1: duplicate value(s) for column(s) MY_COLUMN in statement [...] + // Caused by: java.sql.SQLException: Violation of unique constraint MY_ENTITY_UK_1: duplicate value(s) for column(s) MY_COLUMN in statement [...] + // Caused by: com.example.myproject.MyProjectServletException + // Caused by: MidLevelException: LowLevelException + // Suppressed: Resource$CloseFailException: Resource ID = 0 + summary: { + pattern: + /^([\t ]*)(?:(?:Caused by:|Suppressed:|Exception in thread "[^"]*")[\t ]+)?[\w$.]+(?::.*)?$/m, + lookbehind: true, + inside: { + keyword: { + pattern: + /^([\t ]*)(?:(?:Caused by|Suppressed)(?=:)|Exception in thread)/m, + lookbehind: true, + }, + + // the current thread if the summary starts with 'Exception in thread' + string: { + pattern: /^(\s*)"[^"]*"/, + lookbehind: true, + }, + exceptions: { + pattern: /^(:?\s*)[\w$.]+(?=:|$)/, + lookbehind: true, + inside: { + 'class-name': /[\w$]+$/, + namespace: /\b[a-z]\w*\b/, + punctuation: /\./, + }, + }, + message: { + pattern: /(:\s*)\S.*/, + lookbehind: true, + alias: 'string', + }, + punctuation: /:/, + }, + }, + + // at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) + // at org.hsqldb.jdbc.Util.throwError(Unknown Source) here could be some notes + // at java.base/java.lang.Class.forName0(Native Method) + // at Util.<init>(Unknown Source) + // at com.foo.loader/foo@9.0/com.foo.Main.run(Main.java:101) + // at com.foo.loader//com.foo.bar.App.run(App.java:12) + // at acme@2.1/org.acme.Lib.test(Lib.java:80) + // at MyClass.mash(MyClass.java:9) + // + // More information: + // https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/StackTraceElement.html#toString() + // + // A valid Java module name is defined as: + // "A module name consists of one or more Java identifiers (ยง3.8) separated by "." tokens." + // https://docs.oracle.com/javase/specs/jls/se9/html/jls-6.html#jls-ModuleName + // + // A Java module version is defined by this class: + // https://docs.oracle.com/javase/9/docs/api/java/lang/module/ModuleDescriptor.Version.html + // This is the implementation of the `parse` method in JDK13: + // https://github.com/matcdac/jdk/blob/2305df71d1b7710266ae0956d73927a225132c0f/src/java.base/share/classes/java/lang/module/ModuleDescriptor.java#L1108 + // However, to keep this simple, a version will be matched by the pattern /@[\w$.+-]*/. + 'stack-frame': { + pattern: /^([\t ]*)at (?:[\w$./]|@[\w$.+-]*\/)+(?:<init>)?\([^()]*\)/m, + lookbehind: true, + inside: { + keyword: { + pattern: /^(\s*)at(?= )/, + lookbehind: true, + }, + source: [ + // (Main.java:15) + // (Main.scala:15) + { + pattern: /(\()\w+\.\w+:\d+(?=\))/, + lookbehind: true, + inside: { + file: /^\w+\.\w+/, + punctuation: /:/, + 'line-number': { + pattern: /\b\d+\b/, + alias: 'number', + }, + }, + }, + // (Unknown Source) + // (Native Method) + // (...something...) + { + pattern: /(\()[^()]*(?=\))/, + lookbehind: true, + inside: { + keyword: /^(?:Native Method|Unknown Source)$/, + }, + }, + ], + 'class-name': /[\w$]+(?=\.(?:<init>|[\w$]+)\()/, + function: /(?:<init>|[\w$]+)(?=\()/, + 'class-loader': { + pattern: /(\s)[a-z]\w*(?:\.[a-z]\w*)*(?=\/[\w@$.]*\/)/, + lookbehind: true, + alias: 'namespace', + inside: { + punctuation: /\./, + }, + }, + module: { + pattern: /([\s/])[a-z]\w*(?:\.[a-z]\w*)*(?:@[\w$.+-]*)?(?=\/)/, + lookbehind: true, + inside: { + version: { + pattern: /(@)[\s\S]+/, + lookbehind: true, + alias: 'number', + }, + punctuation: /[@.]/, + }, + }, + namespace: { + pattern: /(?:\b[a-z]\w*\.)+/, + inside: { + punctuation: /\./, + }, + }, + punctuation: /[()/.]/, + }, + }, + + // ... 32 more + // ... 32 common frames omitted + more: { + pattern: /^([\t ]*)\.{3} \d+ [a-z]+(?: [a-z]+)*/m, + lookbehind: true, + inside: { + punctuation: /\.{3}/, + number: /\d+/, + keyword: /\b[a-z]+(?: [a-z]+)*\b/, + }, + }, +}; |
