├── .vscode └── launch.json ├── .vscodeignore ├── LICENSE ├── README.md ├── img ├── icon.png ├── region.png ├── screenshot_20181108.png └── screenshot_20191124.png ├── language-configuration.json ├── package.json └── syntaxes └── abap.tmLanguage /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "Run Extension", 6 | "type": "extensionHost", 7 | "request": "launch", 8 | "runtimeExecutable": "${execPath}", 9 | "args": [ 10 | "--extensionDevelopmentPath=${workspaceFolder}" 11 | ] 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | img/screenshot* 2 | .vscode -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Lars Hvam 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vscode-abap 2 | ABAP syntax highlighting for Visual Studio Code 3 | 4 | Based on https://github.com/pvl/abap.tmbundle 5 | 6 | ![Screenshot](https://raw.githubusercontent.com/larshp/vscode-abap/master/img/screenshot_20191124.png) 7 | 8 | ## Customization 9 | If you want to customize the token colors, add an `editor.tokenColorCustomizations` section to your vscode `settings.json`. The following example will change the color of operators, which have no special highlighting by default: 10 | 11 | ```json 12 | "editor.tokenColorCustomizations": { 13 | "[Default Dark+]": { 14 | "textMateRules": [ 15 | { 16 | "scope": "keyword.operator.abap", 17 | "settings": { 18 | "foreground": "#d456b9" 19 | } 20 | } 21 | ] 22 | } 23 | } 24 | ``` 25 | 26 | ## Folding / Regions 27 | 28 | Example region, 29 | 30 | ```abap 31 | * #region Hello 32 | WRITE 'test'. 33 | * #endregion 34 | ``` 35 | 36 | this will make a foldable region, plus show up in the minimap, 37 | 38 | ![Screenshot](https://raw.githubusercontent.com/larshp/vscode-abap/master/img/region.png) -------------------------------------------------------------------------------- /img/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/vscode-abap/3ff18918557393d71203c0270d659490b073cdb4/img/icon.png -------------------------------------------------------------------------------- /img/region.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/vscode-abap/3ff18918557393d71203c0270d659490b073cdb4/img/region.png -------------------------------------------------------------------------------- /img/screenshot_20181108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/vscode-abap/3ff18918557393d71203c0270d659490b073cdb4/img/screenshot_20181108.png -------------------------------------------------------------------------------- /img/screenshot_20191124.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/vscode-abap/3ff18918557393d71203c0270d659490b073cdb4/img/screenshot_20191124.png -------------------------------------------------------------------------------- /language-configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "comments": { 3 | "lineComment": "\"" 4 | }, 5 | "autoClosingPairs": [ 6 | [ 7 | "( ", 8 | " )" 9 | ], 10 | [ 11 | "[ ", 12 | " ]" 13 | ], 14 | [ 15 | "<", 16 | ">" 17 | ], 18 | [ 19 | "`", 20 | "`" 21 | ], 22 | [ 23 | "'", 24 | "'" 25 | ], 26 | [ 27 | "|", 28 | "|" 29 | ] 30 | ], 31 | "surroundingPairs": [ 32 | [ 33 | "`", 34 | "`" 35 | ], 36 | [ 37 | "'", 38 | "'" 39 | ], 40 | [ 41 | "|", 42 | "|" 43 | ], 44 | [ 45 | "<", 46 | ">" 47 | ] 48 | ], 49 | "indentationRules": { 50 | "increaseIndentPattern": { 51 | "pattern": "^\\s*(METHOD|IF|LOOP|CLASS|CASE|DO|FORM|ELSE|WHILE|TRY|CATCH).*\\.$", 52 | "flags": "i" 53 | }, 54 | "decreaseIndentPattern": { 55 | "pattern": "^\\s*(ENDMETHOD|ENDIF|ENDLOOP|ENDCLASS|ENDCASE|ENDDO|ENDFORM|ELSE|ENDWHILE|ENDTRY|CATCH)\\.$", 56 | "flags": "i" 57 | }, 58 | }, 59 | "folding": { 60 | "markers": { 61 | "start": "^\\*\\s*#?region\\b", 62 | "end": "^\\*\\s*#?endregion\\b" 63 | } 64 | }, 65 | "colorizedBracketPairs": [ 66 | [ 67 | "(", 68 | ")" 69 | ], 70 | [ 71 | "[", 72 | "]" 73 | ], 74 | [ 75 | "METHOD", 76 | "ENDMETHOD" 77 | ], 78 | [ 79 | "method", 80 | "endmethod" 81 | ], 82 | [ 83 | "IF", 84 | "ENDIF" 85 | ], 86 | [ 87 | "if", 88 | "endif" 89 | ], 90 | [ 91 | "CASE", 92 | "ENDCASE" 93 | ], 94 | [ 95 | "case", 96 | "endcase" 97 | ], 98 | [ 99 | "LOOP", 100 | "ENDLOOP" 101 | ], 102 | [ 103 | "loop", 104 | "endloop" 105 | ], 106 | [ 107 | "TRY", 108 | "ENDTRY" 109 | ], 110 | [ 111 | "try", 112 | "endtry" 113 | ], 114 | [ 115 | "WHILE", 116 | "ENDWHILE" 117 | ], 118 | [ 119 | "while", 120 | "endwhile" 121 | ], 122 | [ 123 | "DO", 124 | "ENDDO" 125 | ], 126 | [ 127 | "do", 128 | "enddo" 129 | ], 130 | [ 131 | "BEGIN", 132 | "END" 133 | ], 134 | [ 135 | "begin", 136 | "end" 137 | ] 138 | ] 139 | } 140 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-abap", 3 | "displayName": "ABAP Syntax Highlighting", 4 | "description": "Syntax highlighting for ABAP", 5 | "version": "0.5.10", 6 | "publisher": "larshp", 7 | "engines": { 8 | "vscode": "^0.10.1" 9 | }, 10 | "categories": [ 11 | "Programming Languages" 12 | ], 13 | "keywords": [ 14 | "abap" 15 | ], 16 | "bugs": { 17 | "url": "https://github.com/larshp/vscode-abap/issuess" 18 | }, 19 | "repository": { 20 | "type": "git", 21 | "url": "https://github.com/larshp/vscode-abap.git" 22 | }, 23 | "icon": "img/icon.png", 24 | "contributes": { 25 | "languages": [ 26 | { 27 | "id": "abap", 28 | "configuration": "./language-configuration.json", 29 | "aliases": [ 30 | "ABAP", 31 | "abap" 32 | ], 33 | "extensions": [ 34 | ".abap", 35 | ".ABAP" 36 | ] 37 | } 38 | ], 39 | "grammars": [ 40 | { 41 | "language": "abap", 42 | "scopeName": "source.abap", 43 | "path": "./syntaxes/abap.tmLanguage" 44 | } 45 | ] 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /syntaxes/abap.tmLanguage: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | fileTypes 6 | 7 | abap 8 | ABAP 9 | 10 | foldingStartMarker 11 | /\*\*|\{\s*$ 12 | foldingStopMarker 13 | \*\*/|^\s*\} 14 | keyEquivalent 15 | ^~A 16 | name 17 | ABAP 18 | patterns 19 | 20 | 21 | captures 22 | 23 | 1 24 | 25 | name 26 | punctuation.definition.comment.abap 27 | 28 | 29 | match 30 | ^\*.*\n? 31 | name 32 | comment.line.full.abap 33 | 34 | 35 | captures 36 | 37 | 1 38 | 39 | name 40 | punctuation.definition.comment.abap 41 | 42 | 43 | match 44 | ".*\n? 45 | name 46 | comment.line.partial.abap 47 | 48 | 49 | match 50 | (?<![^\s])##.*?(?=([\.:,\s])) 51 | name 52 | comment.line.pragma.abap 53 | 54 | 55 | match 56 | (?i)(?<=(?:^|\s|~|->|-|=>))([a-z_/][a-z_0-9/]*)(?=\s+(?:=|\+=|-=|\*=|\/=|&&=)\s+) 57 | name 58 | variable.other.abap 59 | 60 | 61 | match 62 | \b[0-9]+(\b|\.|,) 63 | name 64 | constant.numeric.abap 65 | 66 | 67 | match 68 | (?ix)(^|\s+)((PUBLIC|PRIVATE|PROTECTED)\sSECTION)(?=\s+|:|\.) 69 | name 70 | storage.modifier.class.abap 71 | 72 | 73 | begin 74 | (?<!\\)(\|)(.*?) 75 | end 76 | (?<!\\)(\||(\\\\\|)) 77 | name 78 | string.interpolated.abap 79 | beginCaptures 80 | 81 | 1 82 | 83 | name 84 | constant.character.escape.abap 85 | 86 | 87 | endCaptures 88 | 89 | 1 90 | 91 | name 92 | constant.character.escape.abap 93 | 94 | 95 | patterns 96 | 97 | 98 | match 99 | ({ )|( }) 100 | name 101 | constant.character.escape 102 | 103 | 104 | match 105 | (?<={ ).*?(?= }) 106 | name 107 | variable.other.abap 108 | 109 | 110 | match 111 | \\\| 112 | name 113 | constant.character.escape.abap 114 | 115 | 116 | 117 | 118 | begin 119 | ' 120 | end 121 | ' 122 | name 123 | string.quoted.single.abap 124 | patterns 125 | 126 | 127 | match 128 | '' 129 | name 130 | constant.character.escape.abap 131 | 132 | 133 | 134 | 135 | begin 136 | ` 137 | end 138 | ` 139 | name 140 | string.quoted.single.abap 141 | patterns 142 | 143 | 144 | match 145 | `` 146 | name 147 | constant.character.escape.abap 148 | 149 | 150 | 151 | 152 | begin 153 | (?i)^\s*(class)\s([a-z_/][a-z_0-9/]*) 154 | beginCaptures 155 | 156 | 1 157 | 158 | name 159 | storage.type.block.abap 160 | 161 | 2 162 | 163 | name 164 | entity.name.type.block.abap 165 | 166 | 167 | end 168 | \s*\.\s*\n? 169 | name 170 | meta.block.begin.implementation.abap 171 | patterns 172 | 173 | 174 | match 175 | (?ix)(^|\s+)(definition|implementation|public|inheriting\s+from|final|deferred|abstract|shared\s+memory\s+enabled|(global|local)*\s*friends|(create\s+(public|protected|private))|for\s+testing|risk\s+level\s+(critical|dangerous|harmless))|duration\s(short|medium|long)(?=\s+|\.) 176 | name 177 | storage.modifier.class.abap 178 | 179 | 180 | begin 181 | (?=[A-Za-z_][A-Za-z0-9_]*) 182 | contentName 183 | entity.name.type.block.abap 184 | end 185 | (?![A-Za-z0-9_]) 186 | patterns 187 | 188 | 189 | include 190 | #generic_names 191 | 192 | 193 | 194 | 195 | 196 | 197 | begin 198 | (?ix)^\s*(method)\s(?:([a-z_\/][a-z_0-9\/]*)~)?([a-z_\/][a-z_0-9\/]*) 199 | beginCaptures 200 | 201 | 1 202 | 203 | name 204 | storage.type.block.abap 205 | 206 | 2 207 | 208 | name 209 | entity.name.type.abap 210 | 211 | 3 212 | 213 | name 214 | entity.name.function.abap 215 | 216 | 217 | end 218 | \s*\.\s*\n? 219 | patterns 220 | 221 | 222 | match 223 | (?ix)(?<=^|\s)(BY\s+DATABASE(\s+PROCEDURE|\s+FUNCTION))(?=\s+|\.) 224 | name 225 | storage.modifier.method.abap 226 | 227 | 228 | match 229 | (?ix)(?<=^|\s)(FOR\s+(HDB|LLANG))(?=\s+|\.) 230 | name 231 | storage.modifier.method.abap 232 | 233 | 234 | match 235 | (?ix)(?<=\s)(OPTIONS\s+(READ-ONLY|DETERMINISTIC|SUPPRESS\s+SYNTAX\s+ERRORS))(?=\s+|\.) 236 | name 237 | storage.modifier.method.abap 238 | 239 | 240 | match 241 | (?ix)(?<=^|\s)(LANGUAGE\s+SQLSCRIPT)(?=\s+|\.) 242 | name 243 | storage.modifier.method.abap 244 | 245 | 246 | match 247 | (?ix)(?<=\s)(USING)\s+([a-z_\/][a-z_0-9\/]*)+(?=\s+|\.) 248 | captures 249 | 250 | 1 251 | 252 | name 253 | storage.modifier.method.abap 254 | 255 | 256 | 257 | 258 | begin 259 | (?=[A-Za-z_][A-Za-z0-9_]*) 260 | end 261 | (?![A-Za-z0-9_]) 262 | patterns 263 | 264 | 265 | include 266 | #generic_names 267 | 268 | 269 | 270 | 271 | 272 | 273 | begin 274 | (?ix)^\s*(INTERFACE)\s([a-z_\/][a-z_0-9\/]*) 275 | beginCaptures 276 | 277 | 1 278 | 279 | name 280 | storage.type.block.abap 281 | 282 | 2 283 | 284 | name 285 | entity.name.type.abap 286 | 287 | 288 | end 289 | \s*\.\s*\n? 290 | patterns 291 | 292 | 293 | match 294 | (?ix)(?<=^|\s)(DEFERRED|PUBLIC)(?=\s+|\.) 295 | name 296 | storage.modifier.method.abap 297 | 298 | 299 | 300 | 301 | begin 302 | (?ix)^\s*(FORM)\s([a-z_\/][a-z_0-9\/]*) 303 | beginCaptures 304 | 305 | 1 306 | 307 | name 308 | storage.type.block.abap 309 | 310 | 2 311 | 312 | name 313 | entity.name.type.abap 314 | 315 | 316 | end 317 | \s*\.\s*\n? 318 | patterns 319 | 320 | 321 | match 322 | (?ix)(?<=^|\s)(USING|TABLES|CHANGING|RAISING)(?=\s+|\.) 323 | name 324 | storage.modifier.form.abap 325 | 326 | 327 | include 328 | #abaptypes 329 | 330 | 331 | 332 | 333 | match 334 | (?i)(endclass|endmethod|endform|endinterface) 335 | name 336 | storage.type.block.end.abap 337 | 338 | 339 | match 340 | (?i)(<[A-Za-z_][A-Za-z0-9_]*>) 341 | name 342 | variable.other.field.symbol.abap 343 | 344 | 345 | include 346 | #keywords 347 | 348 | 349 | include 350 | #abap_constants 351 | 352 | 353 | include 354 | #reserved_names 355 | 356 | 357 | include 358 | #operators 359 | 360 | 361 | include 362 | #builtin_functions 363 | 364 | 365 | include 366 | #abaptypes 367 | 368 | 369 | include 370 | #system_fields 371 | 372 | 373 | repository 374 | 375 | abap_constants 376 | 377 | match 378 | (?ix)(?<=\s)(initial|null|space|abap_true|abap_false|table_line)(?=\s|\.|,) 379 | name 380 | constant.language.abap 381 | 382 | reserved_names 383 | 384 | match 385 | (?ix)(?<=\s)(me|super)(?=\s|\.|,|->) 386 | name 387 | constant.language.abap 388 | 389 | abaptypes 390 | 391 | patterns 392 | 393 | 394 | match 395 | (?ix)\s(abap_bool|string|xstring|any|clike|csequence|numeric|xsequence|c|n|i|p|f|d|t|x)(?=\s|\.|,) 396 | name 397 | support.type.abap 398 | 399 | 400 | match 401 | (?ix)\s(TYPE|REF|TO|STANDARD|SORTED|HASHED|INDEX|TABLE|WITH|UNIQUE|NON-UNIQUE|SECONDARY|DEFAULT|KEY)(?=\s|\.|,) 402 | name 403 | keyword.control.simple.abap 404 | 405 | 406 | 407 | arithmetic_operator 408 | 409 | match 410 | (?i)(?<=\s)(\+|\-|\*|\*\*|/|%|DIV|MOD|BIT-AND|BIT-OR|BIT-XOR|BIT-NOT)(?=\s) 411 | name 412 | keyword.control.simple.abap 413 | 414 | comparison_operator 415 | 416 | match 417 | (?i)(?<=\s)(<|>|<\=|>\=|\=|<>|eq|ne|lt|le|gt|ge|cs|cp)(?=\s) 418 | name 419 | keyword.control.simple.abap 420 | 421 | control_keywords 422 | 423 | match 424 | (?ix)(^|\s)( 425 | at|case|catch|continue|do|elseif|else|endat|endcase|enddo|endif| 426 | endloop|endon|if|loop|on|raise|try)(?=\s|\.|:) 427 | name 428 | keyword.control.flow.abap 429 | 430 | generic_names 431 | 432 | match 433 | [A-Za-z_][A-Za-z0-9_]* 434 | 435 | keywords 436 | 437 | patterns 438 | 439 | 440 | include 441 | #main_keywords 442 | 443 | 444 | include 445 | #text_symbols 446 | 447 | 448 | include 449 | #control_keywords 450 | 451 | 452 | include 453 | #keywords_followed_by_braces 454 | 455 | 456 | 457 | logical_operator 458 | 459 | match 460 | (?i)(?<=\s)(not|or|and)(?=\s) 461 | name 462 | keyword.control.simple.abap 463 | 464 | system_fields 465 | 466 | match 467 | (?ix)\b(sy)-(abcde|batch|binpt|calld|callr|colno|cpage|cprog|cucol|curow|datar|datlo|datum|dayst|dbcnt|dbnam|dbsysc|dyngr|dynnr|fdayw|fdpos|host|index|langu|ldbpg|lilli|linct|linno|linsz|lisel|listi|loopc|lsind|macol|mandt|marow|modno|msgid|msgli|msgno|msgty|msgv[1-4]|opsysc|pagno|pfkey|repid|saprl|scols|slset|spono|srows|staco|staro|stepl|subrc|sysid|tabix|tcode|tfill|timlo|title|tleng|tvar[0-9]|tzone|ucomm|uline|uname|uzeit|vline|wtitl|zonlo)(?=\.|\s) 468 | captures 469 | 470 | 1 471 | 472 | name 473 | variable.language.abap 474 | 475 | 2 476 | 477 | name 478 | variable.language.abap 479 | 480 | 481 | 482 | main_keywords 483 | 484 | match 485 | (?ix)(?<=^|\s)( 486 | abstract|access|add|add-corresponding|adjacent|alias|aliases|all|append|appending|ascending|as|assert|assign|assigned|assigning|association|authority-check| 487 | back|badi|base|begin|between|binary|blanks|block|bound|break-point|by|byte| 488 | call|calling|cast|changing|check|checkbox|class-data|class-events|class-method|class-methods|class-pool|clear|close|cnt|collect|commit|comment|cond|character| 489 | corresponding|communication|comparing|component|compute|concatenate|condense|constants|conv|count| 490 | controls|convert|create|currency| 491 | data|descending|default|define|deferred|delete|describe|destination|detail|display|divide|divide-corresponding|display-mode|distinct|duplicates| 492 | deleting| 493 | editor-call|empty|end|endexec|endfunction|ending|endmodule|end-of-definition|end-of-page|end-of-selection|end-test-injection|end-test-seam|exit-command|extension| 494 | endprovide|endselect|endtry|endwhile|enum|event|events|excluding|exec|exit|export| 495 | exporting|extract|exception|exceptions| 496 | field-symbols|field-groups|field|first|fetch|fields|format|frame|free|from|function|find|for|found|function-pool| 497 | generate|get|group| 498 | handle|handler|hide|hashed|header|help-request| 499 | include|import|importing|index|infotypes|initial|initialization| 500 | id|implemented|ignoring|is|in|inner|interface|interfaces|interface-pool|intervals|init|input|insert|instance|into| 501 | join| 502 | key| 503 | language|left-justified|leave|like|line|lines|line-count|line-size|list-processing|load|local|log-point|length|left|leading|lower| 504 | matchcode|memory|method|mesh|message|message-id|methods|mode|modify|module|move|move-corresponding|multiply|multiply-corresponding|match|modif| 505 | new|new-line|new-page|new-section|next|no|no-display|no-gap|no-gaps|no-sign|no-zero|non-unique|number| 506 | occurrence|object|obligatory|of|output|overlay|optional|others|occurrences|occurs|offset|options| 507 | pack|parameter|parameters|partially|perform|pf-status|places|position|print-control|private|privileged|program|protected|provide|public|put| 508 | radiobutton\s+group|raising|range|ranges|receive|receiving|redefinition|reduce|reference|refresh|regex|reject|results|requested| 509 | ref|replace|report|reserve|respecting|restore|result\s+xml|return|returning|right|right-justified|rollback|read|read-only|rp-provide-from-last|run| 510 | scan|screen|scroll|search|select|select-options|selection-screen|set|stamp|state|source|subkey| 511 | seconds|separated|set|shift|single|skip|sort|sorted|split|standard|stamp|starting|start-of-selection|sum|subtract-corresponding|statics|step|stop|structure|submatches|submit|subtract|summary|supplied|suppress|section|syntax-check|syntax-trace|system-call|switch| 512 | tables|table|task|testing|test-seam|test-injection|textpool|then|time|times|title|titlebar|to|top-of-page|trailing|transaction|transfer|transformation|translate|transporting|types|type|type-pool|type-pools| 513 | unassign|unique|uline|union|unpack|until|update|upper|using|user-command| 514 | value|value-request| 515 | wait|when|while|window|write|where|with|work| 516 | xml)(?=\s|\.|:|,) 517 | name 518 | keyword.control.simple.abap 519 | 520 | text_symbols 521 | 522 | match 523 | (?ix)(?<=^|\s)(text)-([A-Z0-9]{1,3})(?=\s|\.|:|,) 524 | captures 525 | 526 | 1 527 | 528 | name 529 | keyword.control.simple.abap 530 | 531 | 2 532 | 533 | name 534 | constant.numeric.abap 535 | 536 | 537 | 538 | keywords_followed_by_braces 539 | 540 | match 541 | (?ix)\b(data|value|field-symbol)\((<?[a-z_\/][a-z_0-9\/]*>?)\) 542 | captures 543 | 544 | 1 545 | 546 | name 547 | keyword.control.simple.abap 548 | 549 | 2 550 | 551 | name 552 | variable.other.abap 553 | 554 | 555 | 556 | operators 557 | 558 | patterns 559 | 560 | 561 | include 562 | #other_operator 563 | 564 | 565 | include 566 | #arithmetic_operator 567 | 568 | 569 | include 570 | #comparison_operator 571 | 572 | 573 | include 574 | #logical_operator 575 | 576 | 577 | 578 | other_operator 579 | 580 | match 581 | (?<=\s)(&&|\?=|\+=|-=|\/=|\*=|&&=)(?=\s) 582 | name 583 | keyword.control.simple.abap 584 | 585 | builtin_functions 586 | 587 | match 588 | (?ix)(?<=\s)(abs|sign|ceil|floor|trunc|frac|acos|asin|atan|cos|sin|tan|cosh|sinh|tanh|exp|log|log10|sqrt|strlen|xstrlen|charlen|lines|numofchar|dbmaxlen|round|rescale|nmax|nmin|cmax|cmin|boolc|boolx|xsdbool|contains|contains_any_of|contains_any_not_of|matches|line_exists|ipow|char_off|count|count_any_of|count_any_not_of|distance|condense|concat_lines_of|escape|find|find_end|find_any_of|find_any_not_of|insert|match|repeat|replace|reverse|segment|shift_left|shift_right|substring|substring_after|substring_from|substring_before|substring_to|to_upper|to_lower|to_mixed|from_mixed|translate|bit-set|line_index)(?=\() 589 | name 590 | entity.name.function.builtin.abap 591 | 592 | 593 | scopeName 594 | source.abap 595 | uuid 596 | 0357FFB4-EFFF-4DE9-8371-B0F9C8DF1B21 597 | 598 | 599 | --------------------------------------------------------------------------------