View raw

1 { 2 "information_for_contributors": [ 3 "This file has been converted from https://github.com/fadeevab/make.tmbundle/blob/master/Syntaxes/Makefile.plist", 4 "If you want to provide a fix or improvement, please create a pull request against the original repository.", 5 "Once accepted there, we are happy to receive an update request." 6 ], 7 "version": "https://github.com/fadeevab/make.tmbundle/commit/1d4c0b541959995db098df751ffc129da39a294b", 8 "name": "Makefile", 9 "scopeName": "source.makefile", 10 "patterns": [ 11 { 12 "include": "#comment" 13 }, 14 { 15 "include": "#variables" 16 }, 17 { 18 "include": "#variable-assignment" 19 }, 20 { 21 "include": "#directives" 22 }, 23 { 24 "include": "#recipe" 25 }, 26 { 27 "include": "#target" 28 } 29 ], 30 "repository": { 31 "comma": { 32 "match": ",", 33 "name": "punctuation.separator.delimeter.comma.makefile" 34 }, 35 "comment": { 36 "begin": "(^[ ]+)?((?<!\\\\)(\\\\\\\\)*)(?=#)", 37 "beginCaptures": { 38 "1": { 39 "name": "punctuation.whitespace.comment.leading.makefile" 40 } 41 }, 42 "end": "(?!\\G)", 43 "patterns": [ 44 { 45 "begin": "#", 46 "beginCaptures": { 47 "0": { 48 "name": "punctuation.definition.comment.makefile" 49 } 50 }, 51 "end": "(?=[^\\\\])$", 52 "name": "comment.line.number-sign.makefile", 53 "patterns": [ 54 { 55 "match": "\\\\\\n", 56 "name": "constant.character.escape.continuation.makefile" 57 } 58 ] 59 } 60 ] 61 }, 62 "directives": { 63 "patterns": [ 64 { 65 "begin": "^[ ]*([s\\-]?include)\\b", 66 "beginCaptures": { 67 "1": { 68 "name": "keyword.control.include.makefile" 69 } 70 }, 71 "end": "^", 72 "patterns": [ 73 { 74 "include": "#comment" 75 }, 76 { 77 "include": "#variables" 78 }, 79 { 80 "match": "%", 81 "name": "constant.other.placeholder.makefile" 82 } 83 ] 84 }, 85 { 86 "begin": "^[ ]*(vpath)\\b", 87 "beginCaptures": { 88 "1": { 89 "name": "keyword.control.vpath.makefile" 90 } 91 }, 92 "end": "^", 93 "patterns": [ 94 { 95 "include": "#comment" 96 }, 97 { 98 "include": "#variables" 99 }, 100 { 101 "match": "%", 102 "name": "constant.other.placeholder.makefile" 103 } 104 ] 105 }, 106 { 107 "begin": "^\\s*(?:(override)\\s*)?(define)\\s*([^\\s]+)\\s*(=|\\?=|:=|\\+=)?(?=\\s)", 108 "captures": { 109 "1": { 110 "name": "keyword.control.override.makefile" 111 }, 112 "2": { 113 "name": "keyword.control.define.makefile" 114 }, 115 "3": { 116 "name": "variable.other.makefile" 117 }, 118 "4": { 119 "name": "punctuation.separator.key-value.makefile" 120 } 121 }, 122 "end": "^\\s*(endef)\\b", 123 "name": "meta.scope.conditional.makefile", 124 "patterns": [ 125 { 126 "begin": "\\G(?!\\n)", 127 "end": "^", 128 "patterns": [ 129 { 130 "include": "#comment" 131 } 132 ] 133 }, 134 { 135 "include": "#variables" 136 }, 137 { 138 "include": "#directives" 139 } 140 ] 141 }, 142 { 143 "begin": "^[ ]*(export)\\b", 144 "beginCaptures": { 145 "1": { 146 "name": "keyword.control.$1.makefile" 147 } 148 }, 149 "end": "^", 150 "patterns": [ 151 { 152 "include": "#comment" 153 }, 154 { 155 "include": "#variable-assignment" 156 }, 157 { 158 "match": "[^\\s]+", 159 "name": "variable.other.makefile" 160 } 161 ] 162 }, 163 { 164 "begin": "^[ ]*(override|private)\\b", 165 "beginCaptures": { 166 "1": { 167 "name": "keyword.control.$1.makefile" 168 } 169 }, 170 "end": "^", 171 "patterns": [ 172 { 173 "include": "#comment" 174 }, 175 { 176 "include": "#variable-assignment" 177 } 178 ] 179 }, 180 { 181 "begin": "^[ ]*(unexport|undefine)\\b", 182 "beginCaptures": { 183 "1": { 184 "name": "keyword.control.$1.makefile" 185 } 186 }, 187 "end": "^", 188 "patterns": [ 189 { 190 "include": "#comment" 191 }, 192 { 193 "match": "[^\\s]+", 194 "name": "variable.other.makefile" 195 } 196 ] 197 }, 198 { 199 "begin": "^\\s*(ifeq|ifneq|ifdef|ifndef)(?=\\s)", 200 "captures": { 201 "1": { 202 "name": "keyword.control.$1.makefile" 203 } 204 }, 205 "end": "^\\s*(endif)\\b", 206 "name": "meta.scope.conditional.makefile", 207 "patterns": [ 208 { 209 "begin": "\\G", 210 "end": "^", 211 "name": "meta.scope.condition.makefile", 212 "patterns": [ 213 { 214 "include": "#comma" 215 }, 216 { 217 "include": "#variables" 218 }, 219 { 220 "include": "#comment" 221 } 222 ] 223 }, 224 { 225 "begin": "^\\s*else(?=\\s)\\s*(ifeq|ifneq|ifdef|ifndef)*(?=\\s)", 226 "beginCaptures": { 227 "0": { 228 "name": "keyword.control.else.makefile" 229 } 230 }, 231 "end": "^", 232 "patterns": [ 233 { 234 "include": "#comma" 235 }, 236 { 237 "include": "#variables" 238 }, 239 { 240 "include": "#comment" 241 } 242 ] 243 }, 244 { 245 "include": "$self" 246 } 247 ] 248 } 249 ] 250 }, 251 "target": { 252 "begin": "^(?!\\t)([^:]*)(:)(?!\\=)", 253 "beginCaptures": { 254 "1": { 255 "patterns": [ 256 { 257 "captures": { 258 "1": { 259 "name": "support.function.target.$1.makefile" 260 } 261 }, 262 "match": "^\\s*(\\.(PHONY|SUFFIXES|DEFAULT|PRECIOUS|INTERMEDIATE|SECONDARY|SECONDEXPANSION|DELETE_ON_ERROR|IGNORE|LOW_RESOLUTION_TIME|SILENT|EXPORT_ALL_VARIABLES|NOTPARALLEL|ONESHELL|POSIX))\\s*$" 263 }, 264 { 265 "begin": "(?=\\S)", 266 "end": "(?=\\s|$)", 267 "name": "entity.name.function.target.makefile", 268 "patterns": [ 269 { 270 "include": "#variables" 271 }, 272 { 273 "match": "%", 274 "name": "constant.other.placeholder.makefile" 275 } 276 ] 277 } 278 ] 279 }, 280 "2": { 281 "name": "punctuation.separator.key-value.makefile" 282 } 283 }, 284 "end": "[^\\\\]$", 285 "name": "meta.scope.target.makefile", 286 "patterns": [ 287 { 288 "begin": "\\G", 289 "end": "(?=[^\\\\])$", 290 "name": "meta.scope.prerequisites.makefile", 291 "patterns": [ 292 { 293 "match": "\\\\\\n", 294 "name": "constant.character.escape.continuation.makefile" 295 }, 296 { 297 "match": "%|\\*", 298 "name": "constant.other.placeholder.makefile" 299 }, 300 { 301 "include": "#comment" 302 }, 303 { 304 "include": "#variables" 305 } 306 ] 307 } 308 ] 309 }, 310 "recipe": { 311 "begin": "^\\t([+\\-@]*)", 312 "beginCaptures": { 313 "1": { 314 "name": "keyword.control.$1.makefile" 315 } 316 }, 317 "end": "[^\\\\]$", 318 "name": "meta.scope.recipe.makefile", 319 "patterns": [ 320 { 321 "match": "\\\\\\n", 322 "name": "constant.character.escape.continuation.makefile" 323 }, 324 { 325 "include": "#variables" 326 } 327 ] 328 }, 329 "variable-assignment": { 330 "begin": "(^[ ]*|\\G\\s*)([^\\s:#=]+)\\s*((?<![?:+!])=|\\?=|:=|\\+=|!=)", 331 "beginCaptures": { 332 "2": { 333 "name": "variable.other.makefile", 334 "patterns": [ 335 { 336 "include": "#variables" 337 } 338 ] 339 }, 340 "3": { 341 "name": "punctuation.separator.key-value.makefile" 342 } 343 }, 344 "end": "\\n", 345 "patterns": [ 346 { 347 "match": "\\\\\\n", 348 "name": "constant.character.escape.continuation.makefile" 349 }, 350 { 351 "include": "#comment" 352 }, 353 { 354 "include": "#variables" 355 } 356 ] 357 }, 358 "interpolation": { 359 "patterns": [ 360 { 361 "include": "#parentheses-interpolation" 362 }, 363 { 364 "include": "#braces-interpolation" 365 } 366 ] 367 }, 368 "parentheses-interpolation": { 369 "begin": "\\(", 370 "end": "\\)", 371 "patterns": [ 372 { 373 "include": "#variables" 374 }, 375 { 376 "include": "#interpolation" 377 } 378 ] 379 }, 380 "braces-interpolation": { 381 "begin": "{", 382 "end": "}", 383 "patterns": [ 384 { 385 "include": "#variables" 386 }, 387 { 388 "include": "#interpolation" 389 } 390 ] 391 }, 392 "variables": { 393 "patterns": [ 394 { 395 "include": "#simple-variable" 396 }, 397 { 398 "include": "#variable-parentheses" 399 }, 400 { 401 "include": "#variable-braces" 402 } 403 ] 404 }, 405 "simple-variable": { 406 "patterns": [ 407 { 408 "match": "\\$[^(){}]", 409 "name": "variable.language.makefile" 410 } 411 ] 412 }, 413 "variable-parentheses": { 414 "patterns": [ 415 { 416 "begin": "\\$\\(", 417 "captures": { 418 "0": { 419 "name": "punctuation.definition.variable.makefile" 420 } 421 }, 422 "end": "\\)|((?<!\\\\)\\n)", 423 "name": "string.interpolated.makefile", 424 "patterns": [ 425 { 426 "include": "#variables" 427 }, 428 { 429 "include": "#builtin-variable-parentheses" 430 }, 431 { 432 "include": "#function-variable-parentheses" 433 }, 434 { 435 "include": "#flavor-variable-parentheses" 436 }, 437 { 438 "include": "#another-variable-parentheses" 439 } 440 ] 441 } 442 ] 443 }, 444 "variable-braces": { 445 "patterns": [ 446 { 447 "begin": "\\${", 448 "captures": { 449 "0": { 450 "name": "punctuation.definition.variable.makefile" 451 } 452 }, 453 "end": "}|((?<!\\\\)\\n)", 454 "name": "string.interpolated.makefile", 455 "patterns": [ 456 { 457 "include": "#variables" 458 }, 459 { 460 "include": "#builtin-variable-braces" 461 }, 462 { 463 "include": "#function-variable-braces" 464 }, 465 { 466 "include": "#flavor-variable-braces" 467 }, 468 { 469 "include": "#another-variable-braces" 470 } 471 ] 472 } 473 ] 474 }, 475 "builtin-variable-parentheses": { 476 "patterns": [ 477 { 478 "match": "(?<=\\()(MAKEFILES|VPATH|SHELL|MAKESHELL|MAKE|MAKELEVEL|MAKEFLAGS|MAKECMDGOALS|CURDIR|SUFFIXES|\\.LIBPATTERNS)(?=\\s*\\))", 479 "name": "variable.language.makefile" 480 } 481 ] 482 }, 483 "builtin-variable-braces": { 484 "patterns": [ 485 { 486 "match": "(?<={)(MAKEFILES|VPATH|SHELL|MAKESHELL|MAKE|MAKELEVEL|MAKEFLAGS|MAKECMDGOALS|CURDIR|SUFFIXES|\\.LIBPATTERNS)(?=\\s*})", 487 "name": "variable.language.makefile" 488 } 489 ] 490 }, 491 "function-variable-parentheses": { 492 "patterns": [ 493 { 494 "begin": "(?<=\\()(subst|patsubst|strip|findstring|filter(-out)?|sort|word(list)?|firstword|lastword|dir|notdir|suffix|basename|addsuffix|addprefix|join|wildcard|realpath|abspath|info|error|warning|shell|foreach|if|or|and|call|eval|value|file|guile)\\s", 495 "beginCaptures": { 496 "1": { 497 "name": "support.function.$1.makefile" 498 } 499 }, 500 "end": "(?=\\)|((?<!\\\\)\\n))", 501 "name": "meta.scope.function-call.makefile", 502 "patterns": [ 503 { 504 "include": "#comma" 505 }, 506 { 507 "include": "#variables" 508 }, 509 { 510 "include": "#interpolation" 511 }, 512 { 513 "match": "%|\\*", 514 "name": "constant.other.placeholder.makefile" 515 }, 516 { 517 "match": "\\\\\\n", 518 "name": "constant.character.escape.continuation.makefile" 519 } 520 ] 521 } 522 ] 523 }, 524 "function-variable-braces": { 525 "patterns": [ 526 { 527 "begin": "(?<={)(subst|patsubst|strip|findstring|filter(-out)?|sort|word(list)?|firstword|lastword|dir|notdir|suffix|basename|addsuffix|addprefix|join|wildcard|realpath|abspath|info|error|warning|shell|foreach|if|or|and|call|eval|value|file|guile)\\s", 528 "beginCaptures": { 529 "1": { 530 "name": "support.function.$1.makefile" 531 } 532 }, 533 "end": "(?=}|((?<!\\\\)\\n))", 534 "name": "meta.scope.function-call.makefile", 535 "patterns": [ 536 { 537 "include": "#comma" 538 }, 539 { 540 "include": "#variables" 541 }, 542 { 543 "include": "#interpolation" 544 }, 545 { 546 "match": "%|\\*", 547 "name": "constant.other.placeholder.makefile" 548 }, 549 { 550 "match": "\\\\\\n", 551 "name": "constant.character.escape.continuation.makefile" 552 } 553 ] 554 } 555 ] 556 }, 557 "flavor-variable-parentheses": { 558 "patterns": [ 559 { 560 "begin": "(?<=\\()(origin|flavor)\\s(?=[^\\s)]+\\s*\\))", 561 "contentName": "variable.other.makefile", 562 "beginCaptures": { 563 "1": { 564 "name": "support.function.$1.makefile" 565 } 566 }, 567 "end": "(?=\\))", 568 "name": "meta.scope.function-call.makefile", 569 "patterns": [ 570 { 571 "include": "#variables" 572 } 573 ] 574 } 575 ] 576 }, 577 "flavor-variable-braces": { 578 "patterns": [ 579 { 580 "begin": "(?<={)(origin|flavor)\\s(?=[^\\s}]+\\s*})", 581 "contentName": "variable.other.makefile", 582 "beginCaptures": { 583 "1": { 584 "name": "support.function.$1.makefile" 585 } 586 }, 587 "end": "(?=})", 588 "name": "meta.scope.function-call.makefile", 589 "patterns": [ 590 { 591 "include": "#variables" 592 } 593 ] 594 } 595 ] 596 }, 597 "another-variable-parentheses": { 598 "patterns": [ 599 { 600 "begin": "(?<=\\()(?!\\))", 601 "end": "(?=\\)|((?<!\\\\)\\n))", 602 "name": "variable.other.makefile", 603 "patterns": [ 604 { 605 "include": "#variables" 606 }, 607 { 608 "match": "\\\\\\n", 609 "name": "constant.character.escape.continuation.makefile" 610 } 611 ] 612 } 613 ] 614 }, 615 "another-variable-braces": { 616 "patterns": [ 617 { 618 "begin": "(?<={)(?!})", 619 "end": "(?=}|((?<!\\\\)\\n))", 620 "name": "variable.other.makefile", 621 "patterns": [ 622 { 623 "include": "#variables" 624 }, 625 { 626 "match": "\\\\\\n", 627 "name": "constant.character.escape.continuation.makefile" 628 } 629 ] 630 } 631 ] 632 } 633 } 634 }