Skip to content

Commit d1af30c

Browse files
authored
Merge pull request highlightjs#31 from highlightjs/update-070
Update syntax for Solidity 0.7.0
2 parents 54f8f75 + dacc17e commit d1af30c

File tree

1 file changed

+48
-22
lines changed

1 file changed

+48
-22
lines changed

solidity.js

Lines changed: 48 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,8 @@ function hljsDefineSolidity(hljs) {
120120
};
121121

122122
//covers the special slot/offset notation in assembly
123-
var SOL_ASSEMBLY_MEMBERS = {
123+
//(old-style, with an underscore)
124+
var SOL_ASSEMBLY_MEMBERS_OLD = {
124125
begin: /_/,
125126
end: /[^A-Za-z0-9$.]/,
126127
excludeBegin: true,
@@ -131,6 +132,20 @@ function hljsDefineSolidity(hljs) {
131132
relevance: 2,
132133
};
133134

135+
//covers the special slot/offset notation in assembly
136+
//(new-style, with a dot; keeping this separate as it
137+
//may be expanded in the future)
138+
var SOL_ASSEMBLY_MEMBERS = {
139+
begin: /\./,
140+
end: /[^A-Za-z0-9$.]/,
141+
excludeBegin: true,
142+
excludeEnd: true,
143+
keywords: {
144+
built_in: 'slot offset'
145+
},
146+
relevance: 2,
147+
};
148+
134149
function isNegativeLookbehindAvailable() {
135150
try {
136151
new RegExp('(?<!.)');
@@ -160,6 +175,24 @@ function hljsDefineSolidity(hljs) {
160175
relevance: 0,
161176
};
162177

178+
var HEX_APOS_STRING_MODE = {
179+
className: 'string',
180+
begin: /hex'(([0-9a-fA-F]{2}_?)*[0-9a-fA-F]{2})?'/, //please also update HEX_QUOTE_STRING_MODE
181+
};
182+
var HEX_QUOTE_STRING_MODE = {
183+
className: 'string',
184+
begin: /hex"(([0-9a-fA-F]{2}_?)*[0-9a-fA-F]{2})?"/, //please also update HEX_APOS_STRING_MODE
185+
};
186+
187+
//I've set these up exactly like hljs's builtin STRING_MODEs,
188+
//except with the optional initial "unicode" text
189+
var SOL_APOS_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, //please also update SOL_QUOTE_STRING_MODE
190+
{ begin: /(unicode)?'/ }
191+
);
192+
var SOL_QUOTE_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, //please also update SOL_APOS_STRING_MODE
193+
{ begin: /(unicode)?"/ }
194+
);
195+
163196
var SOL_FUNC_PARAMS = {
164197
className: 'params',
165198
begin: /\(/, end: /\)/,
@@ -169,22 +202,13 @@ function hljsDefineSolidity(hljs) {
169202
contains: [
170203
hljs.C_LINE_COMMENT_MODE,
171204
hljs.C_BLOCK_COMMENT_MODE,
172-
hljs.APOS_STRING_MODE,
173-
hljs.QUOTE_STRING_MODE,
205+
SOL_APOS_STRING_MODE,
206+
SOL_QUOTE_STRING_MODE,
174207
SOL_NUMBER,
175208
'self' //to account for mappings and fn variables
176209
]
177210
};
178211

179-
var HEX_APOS_STRING_MODE = {
180-
className: 'string',
181-
begin: /hex'(([0-9a-fA-F]{2}_?)*[0-9a-fA-F]{2})?'/, //please also update HEX_QUOTE_STRING_MODE
182-
};
183-
var HEX_QUOTE_STRING_MODE = {
184-
className: 'string',
185-
begin: /hex"(([0-9a-fA-F]{2}_?)*[0-9a-fA-F]{2})?"/, //please also update HEX_APOS_STRING_MODE
186-
};
187-
188212
//NOTE: including "*" as a "lexeme" because we use it as a "keyword" below
189213
var SOL_LEXEMES_RE = /[A-Za-z_$][A-Za-z_$0-9]*|\*/;
190214
//in assembly, identifiers can contain periods (but may not start with them)
@@ -239,8 +263,8 @@ function hljsDefineSolidity(hljs) {
239263
lexemes: SOL_LEXEMES_RE,
240264
contains: [
241265
// basic literal definitions
242-
hljs.APOS_STRING_MODE,
243-
hljs.QUOTE_STRING_MODE,
266+
SOL_APOS_STRING_MODE,
267+
SOL_QUOTE_STRING_MODE,
244268
HEX_APOS_STRING_MODE,
245269
HEX_QUOTE_STRING_MODE,
246270
hljs.C_LINE_COMMENT_MODE,
@@ -296,8 +320,8 @@ function hljsDefineSolidity(hljs) {
296320
keywords: 'import * from as',
297321
contains: [
298322
SOL_TITLE_MODE,
299-
hljs.APOS_STRING_MODE,
300-
hljs.QUOTE_STRING_MODE,
323+
SOL_APOS_STRING_MODE,
324+
SOL_QUOTE_STRING_MODE,
301325
HEX_APOS_STRING_MODE,
302326
HEX_QUOTE_STRING_MODE,
303327
hljs.C_LINE_COMMENT_MODE,
@@ -325,8 +349,8 @@ function hljsDefineSolidity(hljs) {
325349
contains: [
326350
hljs.C_LINE_COMMENT_MODE,
327351
hljs.C_BLOCK_COMMENT_MODE,
328-
hljs.inherit(hljs.APOS_STRING_MODE, { className: 'meta-string' }),
329-
hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'meta-string' })
352+
hljs.inherit(SOL_APOS_STRING_MODE, { className: 'meta-string' }),
353+
hljs.inherit(SOL_QUOTE_STRING_MODE, { className: 'meta-string' })
330354
]
331355
},
332356
{ //assembly section
@@ -341,27 +365,29 @@ function hljsDefineSolidity(hljs) {
341365
keywords: SOL_ASSEMBLY_KEYWORDS,
342366
lexemes: SOL_ASSEMBLY_LEXEMES_RE,
343367
contains: [
344-
hljs.APOS_STRING_MODE,
345-
hljs.QUOTE_STRING_MODE,
368+
SOL_APOS_STRING_MODE,
369+
SOL_QUOTE_STRING_MODE,
346370
HEX_APOS_STRING_MODE,
347371
HEX_QUOTE_STRING_MODE,
348372
hljs.C_LINE_COMMENT_MODE,
349373
hljs.C_BLOCK_COMMENT_MODE,
350374
SOL_NUMBER,
351375
SOL_ASSEMBLY_MEMBERS,
376+
SOL_ASSEMBLY_MEMBERS_OLD,
352377
{ //block within assembly; note the lack of endsParent
353378
begin: '{', end: '}',
354379
keywords: SOL_ASSEMBLY_KEYWORDS,
355380
lexemes: SOL_ASSEMBLY_LEXEMES_RE,
356381
contains: [
357-
hljs.APOS_STRING_MODE,
358-
hljs.QUOTE_STRING_MODE,
382+
SOL_APOS_STRING_MODE,
383+
SOL_QUOTE_STRING_MODE,
359384
HEX_APOS_STRING_MODE,
360385
HEX_QUOTE_STRING_MODE,
361386
hljs.C_LINE_COMMENT_MODE,
362387
hljs.C_BLOCK_COMMENT_MODE,
363388
SOL_NUMBER,
364389
SOL_ASSEMBLY_MEMBERS,
390+
SOL_ASSEMBLY_MEMBERS_OLD,
365391
'self'
366392
]
367393
}

0 commit comments

Comments
 (0)