UNPKG

4.27 kBJavaScriptView Raw
1// Specification:
2// https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/Throwable.html#printStackTrace()
3
4Prism.languages.javastacktrace = {
5
6 // java.sql.SQLException: Violation of unique constraint MY_ENTITY_UK_1: duplicate value(s) for column(s) MY_COLUMN in statement [...]
7 // Caused by: java.sql.SQLException: Violation of unique constraint MY_ENTITY_UK_1: duplicate value(s) for column(s) MY_COLUMN in statement [...]
8 // Caused by: com.example.myproject.MyProjectServletException
9 // Caused by: MidLevelException: LowLevelException
10 // Suppressed: Resource$CloseFailException: Resource ID = 0
11 'summary': {
12 pattern: /^([\t ]*)(?:(?:Caused by:|Suppressed:|Exception in thread "[^"]*")[\t ]+)?[\w$.]+(?::.*)?$/m,
13 lookbehind: true,
14 inside: {
15 'keyword': {
16 pattern: /^([\t ]*)(?:(?:Caused by|Suppressed)(?=:)|Exception in thread)/m,
17 lookbehind: true
18 },
19
20 // the current thread if the summary starts with 'Exception in thread'
21 'string': {
22 pattern: /^(\s*)"[^"]*"/,
23 lookbehind: true
24 },
25 'exceptions': {
26 pattern: /^(:?\s*)[\w$.]+(?=:|$)/,
27 lookbehind: true,
28 inside: {
29 'class-name': /[\w$]+$/,
30 'namespace': /\b[a-z]\w*\b/,
31 'punctuation': /\./
32 }
33 },
34 'message': {
35 pattern: /(:\s*)\S.*/,
36 lookbehind: true,
37 alias: 'string'
38 },
39 'punctuation': /:/
40 }
41 },
42
43 // at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
44 // at org.hsqldb.jdbc.Util.throwError(Unknown Source) here could be some notes
45 // at java.base/java.lang.Class.forName0(Native Method)
46 // at Util.<init>(Unknown Source)
47 // at com.foo.loader/foo@9.0/com.foo.Main.run(Main.java:101)
48 // at com.foo.loader//com.foo.bar.App.run(App.java:12)
49 // at acme@2.1/org.acme.Lib.test(Lib.java:80)
50 // at MyClass.mash(MyClass.java:9)
51 //
52 // More information:
53 // https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/StackTraceElement.html#toString()
54 //
55 // A valid Java module name is defined as:
56 // "A module name consists of one or more Java identifiers (§3.8) separated by "." tokens."
57 // https://docs.oracle.com/javase/specs/jls/se9/html/jls-6.html#jls-ModuleName
58 //
59 // A Java module version is defined by this class:
60 // https://docs.oracle.com/javase/9/docs/api/java/lang/module/ModuleDescriptor.Version.html
61 // This is the implementation of the `parse` method in JDK13:
62 // https://github.com/matcdac/jdk/blob/2305df71d1b7710266ae0956d73927a225132c0f/src/java.base/share/classes/java/lang/module/ModuleDescriptor.java#L1108
63 // However, to keep this simple, a version will be matched by the pattern /@[\w$.+-]*/.
64 'stack-frame': {
65 pattern: /^([\t ]*)at (?:[\w$./]|@[\w$.+-]*\/)+(?:<init>)?\([^()]*\)/m,
66 lookbehind: true,
67 inside: {
68 'keyword': {
69 pattern: /^(\s*)at(?= )/,
70 lookbehind: true
71 },
72 'source': [
73 // (Main.java:15)
74 // (Main.scala:15)
75 {
76 pattern: /(\()\w+\.\w+:\d+(?=\))/,
77 lookbehind: true,
78 inside: {
79 'file': /^\w+\.\w+/,
80 'punctuation': /:/,
81 'line-number': {
82 pattern: /\b\d+\b/,
83 alias: 'number'
84 }
85 }
86 },
87 // (Unknown Source)
88 // (Native Method)
89 // (...something...)
90 {
91 pattern: /(\()[^()]*(?=\))/,
92 lookbehind: true,
93 inside: {
94 'keyword': /^(?:Native Method|Unknown Source)$/
95 }
96 }
97 ],
98 'class-name': /[\w$]+(?=\.(?:<init>|[\w$]+)\()/,
99 'function': /(?:<init>|[\w$]+)(?=\()/,
100 'class-loader': {
101 pattern: /(\s)[a-z]\w*(?:\.[a-z]\w*)*(?=\/[\w@$.]*\/)/,
102 lookbehind: true,
103 alias: 'namespace',
104 inside: {
105 'punctuation': /\./
106 }
107 },
108 'module': {
109 pattern: /([\s/])[a-z]\w*(?:\.[a-z]\w*)*(?:@[\w$.+-]*)?(?=\/)/,
110 lookbehind: true,
111 inside: {
112 'version': {
113 pattern: /(@)[\s\S]+/,
114 lookbehind: true,
115 alias: 'number'
116 },
117 'punctuation': /[@.]/
118 }
119 },
120 'namespace': {
121 pattern: /(?:\b[a-z]\w*\.)+/,
122 inside: {
123 'punctuation': /\./
124 }
125 },
126 'punctuation': /[()/.]/
127 }
128 },
129
130 // ... 32 more
131 // ... 32 common frames omitted
132 'more': {
133 pattern: /^([\t ]*)\.{3} \d+ [a-z]+(?: [a-z]+)*/m,
134 lookbehind: true,
135 inside: {
136 'punctuation': /\.{3}/,
137 'number': /\d+/,
138 'keyword': /\b[a-z]+(?: [a-z]+)*\b/
139 }
140 }
141
142};