github-linguist 7.29.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. checksums.yaml +4 -4
  2. data/bin/git-linguist +7 -3
  3. data/bin/github-linguist +6 -3
  4. data/grammars/etc.json +1 -1
  5. data/grammars/inline.edgeql.json +1 -1
  6. data/grammars/inline.graphql.json +1 -1
  7. data/grammars/inline.peggy.json +1 -0
  8. data/grammars/markdown.gleam.codeblock.json +1 -0
  9. data/grammars/markdown.move.codeblock.json +1 -1
  10. data/grammars/markdown.rego.codeblock.json +1 -0
  11. data/grammars/mdx.move.codeblock.json +1 -0
  12. data/grammars/source.8xp.json +1 -1
  13. data/grammars/source.Caddyfile-test.json +1 -0
  14. data/grammars/source.Caddyfile.json +1 -0
  15. data/grammars/source.abl.json +1 -1
  16. data/grammars/source.astro.json +1 -1
  17. data/grammars/source.bicep.json +1 -1
  18. data/grammars/source.bms.json +1 -1
  19. data/grammars/source.bqn.json +1 -0
  20. data/grammars/source.brs.json +1 -1
  21. data/grammars/source.cairo.json +1 -1
  22. data/grammars/source.cairo0.json +1 -0
  23. data/grammars/source.cl.json +1 -1
  24. data/grammars/source.clar.json +1 -1
  25. data/grammars/source.cmd.json +1 -1
  26. data/grammars/source.cobol.json +1 -1
  27. data/grammars/source.commonlisp.json +1 -1
  28. data/grammars/source.cs.json +1 -1
  29. data/grammars/source.curlrc.json +1 -1
  30. data/grammars/source.curry.json +1 -1
  31. data/grammars/source.cylc.json +1 -0
  32. data/grammars/source.d2.json +1 -1
  33. data/grammars/source.dart.json +1 -1
  34. data/grammars/source.dds.dspf.json +1 -1
  35. data/grammars/source.dds.icff.json +1 -1
  36. data/grammars/source.dds.lf.json +1 -1
  37. data/grammars/source.dds.pf.json +1 -1
  38. data/grammars/source.dds.prtf.json +1 -1
  39. data/grammars/source.dune.json +1 -0
  40. data/grammars/source.elvish.json +1 -1
  41. data/grammars/source.firrtl.json +1 -0
  42. data/grammars/source.fsharp.json +1 -1
  43. data/grammars/source.gdscript.json +1 -1
  44. data/grammars/source.generic-db.json +1 -1
  45. data/grammars/source.gitconfig.json +1 -1
  46. data/grammars/source.gjs.json +1 -1
  47. data/grammars/source.gleam.json +1 -1
  48. data/grammars/source.gts.json +1 -1
  49. data/grammars/source.hcl.json +1 -1
  50. data/grammars/source.hcl.terraform.json +1 -1
  51. data/grammars/source.hgignore.json +1 -1
  52. data/grammars/source.hosts.json +1 -1
  53. data/grammars/source.hx.json +1 -1
  54. data/grammars/source.iCalendar.json +1 -0
  55. data/grammars/source.ice.json +1 -1
  56. data/grammars/source.julia.json +1 -1
  57. data/grammars/source.just.json +1 -1
  58. data/grammars/source.kotlin.json +1 -1
  59. data/grammars/source.lcb.json +1 -0
  60. data/grammars/source.lilypond.json +1 -1
  61. data/grammars/source.livecodescript.json +1 -0
  62. data/grammars/source.lua.json +1 -1
  63. data/grammars/source.luau.json +1 -0
  64. data/grammars/source.m2.json +1 -1
  65. data/grammars/source.markdown.caddy.codeblock.json +1 -0
  66. data/grammars/source.matlab.json +1 -1
  67. data/grammars/source.mcfunction.json +1 -1
  68. data/grammars/source.mdx.json +1 -1
  69. data/grammars/source.mo.json +1 -1
  70. data/grammars/source.mojo.json +1 -1
  71. data/grammars/source.move.json +1 -1
  72. data/grammars/source.nanorc.json +1 -1
  73. data/grammars/source.nim.json +1 -1
  74. data/grammars/source.nr.json +1 -0
  75. data/grammars/source.nushell.json +1 -1
  76. data/grammars/source.odin.json +1 -1
  77. data/grammars/source.p4.json +1 -1
  78. data/grammars/source.peggy.json +1 -0
  79. data/grammars/source.pkl.json +1 -0
  80. data/grammars/source.polar.json +1 -1
  81. data/grammars/source.powerbuilder.json +1 -0
  82. data/grammars/source.qsharp.json +1 -1
  83. data/grammars/source.rascal.json +1 -1
  84. data/grammars/source.rego.json +1 -1
  85. data/grammars/source.rescript.json +1 -1
  86. data/grammars/source.ron.json +1 -0
  87. data/grammars/source.rpgle.json +1 -1
  88. data/grammars/source.rust.json +1 -1
  89. data/grammars/source.sentinel.json +1 -1
  90. data/grammars/source.solidity.json +1 -1
  91. data/grammars/source.sourcepawn.json +1 -1
  92. data/grammars/source.sqf.json +1 -1
  93. data/grammars/source.stan.json +1 -1
  94. data/grammars/source.swift.json +1 -1
  95. data/grammars/source.sy.json +1 -1
  96. data/grammars/source.templ.json +1 -0
  97. data/grammars/source.vba.json +1 -1
  98. data/grammars/source.vcard.json +1 -0
  99. data/grammars/source.wdl.json +1 -1
  100. data/grammars/source.wsd.json +1 -1
  101. data/grammars/text.adblock.json +1 -1
  102. data/grammars/text.crontab.json +1 -0
  103. data/grammars/text.html.jte.json +1 -0
  104. data/grammars/text.html.statamic.json +1 -1
  105. data/grammars/text.md.json +1 -1
  106. data/grammars/text.mdx.astro.codeblock.json +1 -0
  107. data/grammars/text.valve-cfg.json +1 -1
  108. data/grammars/version +1 -1
  109. data/lib/linguist/VERSION +1 -1
  110. data/lib/linguist/classifier.rb +315 -106
  111. data/lib/linguist/generated.rb +33 -4
  112. data/lib/linguist/generic.yml +1 -0
  113. data/lib/linguist/heuristics.rb +6 -6
  114. data/lib/linguist/heuristics.yml +63 -4
  115. data/lib/linguist/languages.json +1 -1
  116. data/lib/linguist/languages.yml +224 -4
  117. data/lib/linguist/repository.rb +8 -6
  118. data/lib/linguist/samples.json +1 -1
  119. data/lib/linguist/samples.rb +9 -1
  120. data/lib/linguist/sha256.rb +1 -1
  121. metadata +29 -7
  122. data/grammars/inline.graphql.rb.json +0 -1
  123. data/grammars/markdown.mcfunction.codeblock.json +0 -1
  124. data/grammars/mdx.LANGUAGE.codeblock.json +0 -1
  125. data/grammars/source.terraform.json +0 -1
@@ -25,7 +25,14 @@ module Linguist
25
25
  # Hash of serialized samples object, uncached
26
26
  def self.load_samples
27
27
  serializer = defined?(Yajl) ? Yajl : JSON
28
- serializer.load(File.read(PATH, encoding: 'utf-8'))
28
+ data = serializer.load(File.read(PATH, encoding: 'utf-8'))
29
+ # JSON serialization does not allow integer keys, we fix them here
30
+ for lang in data['centroids'].keys
31
+ fixed = data['centroids'][lang].to_a.map { |k,v| [k.to_i, v] }
32
+ data['centroids'][lang] = Hash[fixed]
33
+ end
34
+
35
+ data
29
36
  end
30
37
 
31
38
  # Public: Iterate over each sample.
@@ -106,6 +113,7 @@ module Linguist
106
113
  Classifier.train!(db, language_name, data)
107
114
  end
108
115
 
116
+ Classifier.finalize_train! db
109
117
  db['sha256'] = Linguist::SHA256.hexdigest(db)
110
118
 
111
119
  db
@@ -13,7 +13,7 @@ module Linguist
13
13
  digest = Digest::SHA256.new
14
14
 
15
15
  case obj
16
- when String, Symbol, Integer
16
+ when String, Symbol, Integer, Float
17
17
  digest.update "#{obj.class}"
18
18
  digest.update "#{obj}"
19
19
  when TrueClass, FalseClass, NilClass
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github-linguist
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.29.0
4
+ version: 8.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitHub
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-13 00:00:00.000000000 Z
11
+ date: 2024-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cgi
@@ -244,11 +244,11 @@ files:
244
244
  - grammars/inline.graphql.markdown.codeblock.json
245
245
  - grammars/inline.graphql.php.json
246
246
  - grammars/inline.graphql.python.json
247
- - grammars/inline.graphql.rb.json
248
247
  - grammars/inline.graphql.re.json
249
248
  - grammars/inline.graphql.res.json
250
249
  - grammars/inline.graphql.scala.json
251
250
  - grammars/inline.hbs.json
251
+ - grammars/inline.peggy.json
252
252
  - grammars/inline.prisma.json
253
253
  - grammars/inline.template.json
254
254
  - grammars/liquid.injection.json
@@ -258,24 +258,27 @@ files:
258
258
  - grammars/markdown.commonlisp.codeblock.json
259
259
  - grammars/markdown.curry.codeblock.json
260
260
  - grammars/markdown.d2.codeblock.json
261
+ - grammars/markdown.gleam.codeblock.json
261
262
  - grammars/markdown.glimmer.codeblock.json
262
263
  - grammars/markdown.hack.codeblock.json
263
264
  - grammars/markdown.haxe.codeblock.json
264
265
  - grammars/markdown.hxml.codeblock.json
265
266
  - grammars/markdown.lean.codeblock.json
266
267
  - grammars/markdown.lean4.codeblock.json
267
- - grammars/markdown.mcfunction.codeblock.json
268
268
  - grammars/markdown.move.codeblock.json
269
269
  - grammars/markdown.plantuml.codeblock.json
270
270
  - grammars/markdown.prisma.codeblock.json
271
+ - grammars/markdown.rego.codeblock.json
271
272
  - grammars/markdown.rescript.codeblock.json
272
273
  - grammars/markdown.talon.codeblock.json
273
274
  - grammars/markdown.textproto.codeblock.json
274
- - grammars/mdx.LANGUAGE.codeblock.json
275
+ - grammars/mdx.move.codeblock.json
275
276
  - grammars/objdump.x86asm.json
276
277
  - grammars/source.2da.json
277
278
  - grammars/source.4dm.json
278
279
  - grammars/source.8xp.json
280
+ - grammars/source.Caddyfile-test.json
281
+ - grammars/source.Caddyfile.json
279
282
  - grammars/source.abap.json
280
283
  - grammars/source.abapcds.json
281
284
  - grammars/source.abl.json
@@ -330,6 +333,7 @@ files:
330
333
  - grammars/source.boo.json
331
334
  - grammars/source.boogie.json
332
335
  - grammars/source.bp.json
336
+ - grammars/source.bqn.json
333
337
  - grammars/source.brs.json
334
338
  - grammars/source.bsl.json
335
339
  - grammars/source.bsv.json
@@ -344,6 +348,7 @@ files:
344
348
  - grammars/source.cache.cmake.json
345
349
  - grammars/source.cadence.json
346
350
  - grammars/source.cairo.json
351
+ - grammars/source.cairo0.json
347
352
  - grammars/source.camlp4.ocaml.json
348
353
  - grammars/source.capnp.json
349
354
  - grammars/source.cds.json
@@ -394,6 +399,7 @@ files:
394
399
  - grammars/source.curlrc.json
395
400
  - grammars/source.curry.json
396
401
  - grammars/source.cwl.json
402
+ - grammars/source.cylc.json
397
403
  - grammars/source.cypher.json
398
404
  - grammars/source.cython.json
399
405
  - grammars/source.d.json
@@ -424,6 +430,7 @@ files:
424
430
  - grammars/source.dosbox-conf.json
425
431
  - grammars/source.dot.json
426
432
  - grammars/source.dotenv.json
433
+ - grammars/source.dune.json
427
434
  - grammars/source.dylan.json
428
435
  - grammars/source.earthfile.json
429
436
  - grammars/source.ebnf.json
@@ -448,6 +455,7 @@ files:
448
455
  - grammars/source.figctrl.json
449
456
  - grammars/source.figfont.json
450
457
  - grammars/source.firestore.json
458
+ - grammars/source.firrtl.json
451
459
  - grammars/source.fish.json
452
460
  - grammars/source.fnl.json
453
461
  - grammars/source.fontdir.json
@@ -524,6 +532,7 @@ files:
524
532
  - grammars/source.hx.type.json
525
533
  - grammars/source.hxml.json
526
534
  - grammars/source.hy.json
535
+ - grammars/source.iCalendar.json
527
536
  - grammars/source.ice.json
528
537
  - grammars/source.icurry.json
529
538
  - grammars/source.ideal.json
@@ -575,6 +584,7 @@ files:
575
584
  - grammars/source.kusto.json
576
585
  - grammars/source.lark.json
577
586
  - grammars/source.lbnf.json
587
+ - grammars/source.lcb.json
578
588
  - grammars/source.lcov.json
579
589
  - grammars/source.lean.json
580
590
  - grammars/source.lean.markdown.json
@@ -587,6 +597,7 @@ files:
587
597
  - grammars/source.lilypond.json
588
598
  - grammars/source.lisp.json
589
599
  - grammars/source.litcoffee.json
600
+ - grammars/source.livecodescript.json
590
601
  - grammars/source.livescript.json
591
602
  - grammars/source.llvm.json
592
603
  - grammars/source.logos.json
@@ -596,6 +607,7 @@ files:
596
607
  - grammars/source.lsl.json
597
608
  - grammars/source.ltspice.symbol.json
598
609
  - grammars/source.lua.json
610
+ - grammars/source.luau.json
599
611
  - grammars/source.m2.json
600
612
  - grammars/source.m4.json
601
613
  - grammars/source.m68k.json
@@ -603,6 +615,7 @@ files:
603
615
  - grammars/source.makefile.json
604
616
  - grammars/source.makegen.json
605
617
  - grammars/source.man-conf.json
618
+ - grammars/source.markdown.caddy.codeblock.json
606
619
  - grammars/source.mask.json
607
620
  - grammars/source.mata.json
608
621
  - grammars/source.mathematica.json
@@ -663,6 +676,7 @@ files:
663
676
  - grammars/source.ninja.json
664
677
  - grammars/source.nit.json
665
678
  - grammars/source.nix.json
679
+ - grammars/source.nr.json
666
680
  - grammars/source.nsis.json
667
681
  - grammars/source.nu.json
668
682
  - grammars/source.nunjucks.json
@@ -704,6 +718,7 @@ files:
704
718
  - grammars/source.pddl.happenings.json
705
719
  - grammars/source.pddl.json
706
720
  - grammars/source.pddl.plan.json
721
+ - grammars/source.peggy.json
707
722
  - grammars/source.pegjs.json
708
723
  - grammars/source.pep8.json
709
724
  - grammars/source.perl.6.json
@@ -713,6 +728,7 @@ files:
713
728
  - grammars/source.pig_latin.json
714
729
  - grammars/source.pike.json
715
730
  - grammars/source.pip-requirements.json
731
+ - grammars/source.pkl.json
716
732
  - grammars/source.pli.json
717
733
  - grammars/source.plist.json
718
734
  - grammars/source.pnlgrp.json
@@ -724,6 +740,7 @@ files:
724
740
  - grammars/source.postcss.json
725
741
  - grammars/source.postscript.json
726
742
  - grammars/source.pov-ray sdl.json
743
+ - grammars/source.powerbuilder.json
727
744
  - grammars/source.powershell.json
728
745
  - grammars/source.praat.json
729
746
  - grammars/source.prisma.json
@@ -777,6 +794,7 @@ files:
777
794
  - grammars/source.ring.json
778
795
  - grammars/source.rmcobol.json
779
796
  - grammars/source.roc.json
797
+ - grammars/source.ron.json
780
798
  - grammars/source.rpg.json
781
799
  - grammars/source.rpgle.json
782
800
  - grammars/source.rpm-spec.json
@@ -840,8 +858,8 @@ files:
840
858
  - grammars/source.talon.json
841
859
  - grammars/source.tcl.json
842
860
  - grammars/source.tea.json
861
+ - grammars/source.templ.json
843
862
  - grammars/source.terra.json
844
- - grammars/source.terraform.json
845
863
  - grammars/source.textgrid.json
846
864
  - grammars/source.textproto.json
847
865
  - grammars/source.thrift.json
@@ -871,6 +889,7 @@ files:
871
889
  - grammars/source.varnish.vcl.json
872
890
  - grammars/source.vba.json
873
891
  - grammars/source.vbnet.json
892
+ - grammars/source.vcard.json
874
893
  - grammars/source.velocity.html.json
875
894
  - grammars/source.velocity.json
876
895
  - grammars/source.verilog.json
@@ -922,6 +941,7 @@ files:
922
941
  - grammars/text.checksums.json
923
942
  - grammars/text.codeowners.json
924
943
  - grammars/text.conllu.json
944
+ - grammars/text.crontab.json
925
945
  - grammars/text.dfy.dafny.json
926
946
  - grammars/text.elixir.json
927
947
  - grammars/text.eml.basic.json
@@ -953,6 +973,7 @@ files:
953
973
  - grammars/text.html.javadoc.json
954
974
  - grammars/text.html.js.json
955
975
  - grammars/text.html.jsp.json
976
+ - grammars/text.html.jte.json
956
977
  - grammars/text.html.liquid.json
957
978
  - grammars/text.html.mako.json
958
979
  - grammars/text.html.markdown.astro.json
@@ -982,6 +1003,7 @@ files:
982
1003
  - grammars/text.log.latex.json
983
1004
  - grammars/text.marko.json
984
1005
  - grammars/text.md.json
1006
+ - grammars/text.mdx.astro.codeblock.json
985
1007
  - grammars/text.muse.json
986
1008
  - grammars/text.openbsd-pkg.desc.json
987
1009
  - grammars/text.plain.json
@@ -1076,7 +1098,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1076
1098
  - !ruby/object:Gem::Version
1077
1099
  version: '0'
1078
1100
  requirements: []
1079
- rubygems_version: 3.5.3
1101
+ rubygems_version: 3.5.11
1080
1102
  signing_key:
1081
1103
  specification_version: 4
1082
1104
  summary: GitHub Language detection
@@ -1 +0,0 @@
1
- {"scopeName":"inline.graphql.rb","patterns":[{"name":"taggedTemplates","contentName":"meta.embedded.block.graphql","begin":"(?=(?\u003e\u003c\u003c[-~](['\"]?)((?:[_\\w]+_|)GRAPHQL)\\b\\1))","end":"\\s*\\2$\\n?","patterns":[{"include":"source.graphql"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ruby"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.ruby"}}}]}
@@ -1 +0,0 @@
1
- {"scopeName":"markdown.mcfunction.codeblock","patterns":[{"include":"#codeblock.outer"}],"repository":{"codeblock.inner":{"contentName":"meta.embedded.block.mcfunction","begin":"(^|\\G)","while":"(^|\\G)(?!\\s*([`~]{3,})\\s*$)","patterns":[{"include":"source.mcfunction"}]},"codeblock.outer":{"name":"markup.fenced_code.block.markdown","begin":"(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(mcfunction)((\\s+|:|\\{|\\?)[^`~]*)?$)","end":"(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$","patterns":[{"include":"#codeblock.inner"}],"beginCaptures":{"3":{"name":"punctuation.definition.markdown"},"4":{"name":"fenced_code.block.language.markdown"},"5":{"name":"fenced_code.block.language.attributes.markdown"}},"endCaptures":{"3":{"name":"punctuation.definition.markdown"}}}}}
@@ -1 +0,0 @@
1
- {"scopeName":"mdx.LANGUAGE.codeblock","patterns":[{"include":"#LANGUAGE-code-block"}],"repository":{"LANGUAGE-code-block":{"name":"markup.code.other.mdx","end":"(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$","patterns":[{"contentName":"meta.embedded.block.LANGUAGE","begin":"(^|\\G)(\\s*)(.*)","while":"(^|\\G)(?!\\s*([`~]{3,})\\s*$)","patterns":[{}]}],"beginCaptures":{"3":{"name":"string.other.begin.code.fenced.mdx"},"4":{"name":"entity.name.function.mdx"}},"endCaptures":{"3":{"name":"string.other.end.code.fenced.mdx"}}}}}
@@ -1 +0,0 @@
1
- {"name":"Terraform","scopeName":"source.terraform","patterns":[{"include":"#comments"},{"include":"#top_level_attribute_definition"},{"include":"#imports"},{"include":"#block"},{"include":"#expressions"}],"repository":{"attribute_access":{"begin":"\\.","end":"(\\b(?!null|false|true)[[:alpha:]][[:alnum:]_-]*\\b)|(\\*)|(\\d+)","beginCaptures":{"0":{"name":"keyword.operator.accessor.terraform"}},"endCaptures":{"1":{"name":"variable.other.member.terraform"},"2":{"name":"keyword.operator.splat.terraform"},"3":{"name":"constant.numeric.integer.terraform"}}},"block":{"name":"meta.type.terraform","begin":"(\\b(resource|provider|variable|output|locals|module|data|terraform)\\b|(\\b(?!null|false|true)[[:alpha:]][[:alnum:]_-]*\\b))(?=[\\s\\\"\\-[:word:]]*(\\{))","end":"(?=\\{)","patterns":[{"name":"string.quoted.double.terraform","begin":"\\\"","end":"\\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.terraform"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.terraform"}}},{"name":"entity.name.label.terraform","match":"\\b(?!null|false|true)[[:alpha:]][[:alnum:]_-]*\\b"}],"beginCaptures":{"2":{"name":"storage.type.terraform"},"3":{"name":"entity.name.type.terraform"}}},"block_comments":{"name":"comment.block.terraform","begin":"/\\*","end":"\\*/","beginCaptures":{"0":{"name":"punctuation.definition.comment.terraform"}},"endCaptures":{"0":{"name":"punctuation.definition.comment.terraform"}}},"brackets":{"begin":"\\[","end":"(\\*)?\\]","patterns":[{"include":"#comma"},{"include":"#comments"},{"include":"#expressions"},{"include":"#tuple_for_expression"}],"beginCaptures":{"0":{"name":"punctuation.section.brackets.begin.terraform"}},"endCaptures":{"0":{"name":"punctuation.section.brackets.end.terraform"},"1":{"name":"keyword.operator.splat.terraform"}}},"comma":{"name":"punctuation.separator.terraform","match":"\\,"},"comments":{"patterns":[{"include":"#inline_comments"},{"include":"#block_comments"}]},"expressions":{"patterns":[{"include":"#literal_values"},{"include":"#operators"},{"include":"#brackets"},{"include":"#objects"},{"include":"#attribute_access"},{"include":"#functions"},{"include":"#parens"}]},"functions":{"name":"meta.function-call.terraform","begin":"((abs|ceil|floor|log|max|min|pow|signum|chomp|format|formatlist|indent|join|lower|regex|regexall|replace|split|strrev|substr|title|trimspace|upper|chunklist|coalesce|coalescelist|compact|concat|contains|distinct|element|flatten|index|keys|length|list|lookup|map|matchkeys|merge|range|reverse|setintersection|setproduct|setunion|slice|sort|transpose|values|zipmap|base64decode|base64encode|base64gzip|csvdecode|jsondecode|jsonencode|urlencode|yamldecode|yamlencode|abspath|dirname|pathexpand|basename|file|fileexists|fileset|filebase64|templatefile|formatdate|timeadd|timestamp|base64sha256|base64sha512|bcrypt|filebase64sha256|filebase64sha512|filemd5|filemd1|filesha256|filesha512|md5|rsadecrypt|sha1|sha256|sha512|uuid|uuidv5|cidrhost|cidrnetmask|cidrsubnet|tobool|tolist|tomap|tonumber|toset|tostring)|\\b((?!null|false|true)[[:alpha:]][[:alnum:]_-]*\\b))(\\()","end":"\\)","patterns":[{"include":"#comments"},{"include":"#expressions"},{"include":"#comma"}],"beginCaptures":{"2":{"name":"support.function.builtin.terraform"},"3":{"name":"variable.function.terraform"},"4":{"name":"punctuation.section.parens.begin.terraform"}},"endCaptures":{"0":{"name":"punctuation.section.parens.end.terraform"}}},"heredoc":{"name":"string.unquoted.heredoc.terraform","begin":"(\\\u003c\\\u003c\\-?)\\s*(\\b(?!null|false|true)[[:alpha:]][[:alnum:]_-]*\\b)\\s*$","end":"^\\s*\\2\\s*$","patterns":[{"include":"#string_interpolation"}],"beginCaptures":{"1":{"name":"keyword.operator.heredoc.terraform"},"2":{"name":"keyword.control.heredoc.terraform"}},"endCaptures":{"0":{"name":"keyword.control.heredoc.terraform"}}},"imports":{"begin":"\\s*(terraform)\\s*(import)\\s*","end":"$\\n?","patterns":[{"include":"#string_literals"},{"name":"entity.name.label.terraform","match":"\\b(?!null|false|true)[[:alpha:]][[:alnum:]_-]*\\b"},{"include":"#numeric_literals"},{"include":"#attribute_access"}],"beginCaptures":{"1":{"name":"support.constant.terraform"},"2":{"name":"keyword.control.import.terraform"}}},"inline_comments":{"name":"comment.line.terraform","begin":"#|//","end":"$\n?","beginCaptures":{"0":{"name":"punctuation.definition.comment.terraform"}}},"language_constants":{"name":"constant.language.terraform","match":"\\b(true|false|null)\\b"},"literal_values":{"patterns":[{"include":"#numeric_literals"},{"include":"#language_constants"},{"include":"#string_literals"},{"include":"#heredoc"},{"include":"#type_keywords"},{"include":"#named_value_references"}]},"main":{"patterns":[{"include":"#comments"},{"include":"#block"},{"include":"#expressions"}]},"named_value_references":{"name":"support.constant.terraform","match":"\\b(var|local|module|data|path|terraform)\\b"},"numeric_literals":{"patterns":[{"name":"constant.numeric.float.terraform","match":"\\b\\d+(([Ee][+-]?))\\d+\\b","captures":{"1":{"name":"punctuation.separator.exponent.terraform"}}},{"name":"constant.numeric.float.terraform","match":"\\b\\d+(\\.)\\d+(?:(([Ee][+-]?))\\d+)?\\b","captures":{"1":{"name":"punctuation.separator.decimal.terraform"},"2":{"name":"punctuation.separator.exponent.terraform"}}},{"name":"constant.numeric.integer.terraform","match":"\\b\\d+\\b"}]},"object_for_expression":{"begin":"\\bfor\\b","end":"(?=\\})","patterns":[{"name":"storage.type.function.terraform","match":"\\=\\\u003e"},{"name":"keyword.operator.word.terraform","match":"\\bin\\b"},{"name":"keyword.control.conditional.terraform","match":"\\bif\\b"},{"name":"keyword.operator.terraform","match":"\\:"},{"include":"#expressions"},{"include":"#comments"},{"include":"#comma"},{"name":"variable.other.readwrite.terraform","match":"\\b(?!null|false|true)[[:alpha:]][[:alnum:]_-]*\\b"}],"beginCaptures":{"0":{"name":"keyword.control.terraform"}}},"object_key_values":{"patterns":[{"include":"#comments"},{"include":"#expressions"}]},"objects":{"name":"meta.braces.terraform","begin":"\\{","end":"\\}","patterns":[{"include":"#object_for_expression"},{"include":"#comments"},{"begin":"\\s*(\\b(?!null|false|true)[[:alpha:]][[:alnum:]_-]*\\b)\\s*(\\=)\\s*","end":"((\\,)|($\\n?)|(?=\\}))","patterns":[{"include":"#object_key_values"}],"beginCaptures":{"1":{"name":"meta.mapping.key.terraform string.unquoted.terraform"},"2":{"name":"keyword.operator.terraform"}},"endCaptures":{"1":{"name":"punctuation.separator.terraform"},"3":{"name":"punctuation.section.braces.end.terraform"}}},{"begin":"((\\\").*(\\\"))\\s*(\\=)\\s*","end":"((\\,)|($\\n?)|(?=\\}))","patterns":[{"include":"#object_key_values"}],"beginCaptures":{"1":{"name":"meta.mapping.key.terraform string.quoted.double.terraform"},"2":{"name":"punctuation.definition.string.begin.terraform"},"3":{"name":"punctuation.definition.string.end.terraform"},"4":{"name":"keyword.operator.terraform"}},"endCaptures":{"1":{"name":"punctuation.separator.terraform"},"3":{"name":"punctuation.section.braces.end.terraform"}}},{"name":"meta.mapping.key.terraform","begin":"\\(","end":"(\\))\\s*(\\=)\\s*","patterns":[{"include":"#expressions"}],"beginCaptures":{"0":{"name":"punctuation.section.parens.begin.terraform"}},"endCaptures":{"1":{"name":"punctuation.section.parens.end.terraform"},"2":{"name":"keyword.operator.terraform"}}},{"patterns":[{"include":"#main"}]}],"beginCaptures":{"0":{"name":"punctuation.section.braces.begin.terraform"}},"endCaptures":{"0":{"name":"punctuation.section.braces.end.terraform"}}},"operators":{"patterns":[{"name":"keyword.operator.terraform","match":"\\\u003e\\="},{"name":"keyword.operator.terraform","match":"\\\u003c\\="},{"name":"keyword.operator.terraform","match":"\\=\\="},{"name":"keyword.operator.terraform","match":"\\!\\="},{"name":"keyword.operator.arithmetic.terraform","match":"\\+"},{"name":"keyword.operator.arithmetic.terraform","match":"\\-"},{"name":"keyword.operator.arithmetic.terraform","match":"\\*"},{"name":"keyword.operator.arithmetic.terraform","match":"\\/"},{"name":"keyword.operator.arithmetic.terraform","match":"\\%"},{"name":"keyword.operator.logical.terraform","match":"\\\u0026\\\u0026"},{"name":"keyword.operator.logical.terraform","match":"\\|\\|"},{"name":"keyword.operator.logical.terraform","match":"\\!"},{"name":"keyword.operator.terraform","match":"\\\u003e"},{"name":"keyword.operator.terraform","match":"\\\u003c"},{"name":"keyword.operator.terraform","match":"\\?"},{"name":"keyword.operator.terraform","match":"\\.\\.\\."},{"name":"keyword.operator.terraform","match":"\\:"}]},"parens":{"begin":"\\(","end":"\\)","patterns":[{"include":"#expressions"},{"name":"variable.other.readwrite.terraform","match":"\\b(?!null|false|true)[[:alpha:]][[:alnum:]_-]*\\b"}],"beginCaptures":{"0":{"name":"punctuation.section.parens.begin.terraform"}},"endCaptures":{"0":{"name":"punctuation.section.parens.end.terraform"}}},"string_interpolation":{"name":"meta.interpolation.terraform","begin":"(\\$|\\%)\\{","end":"\\}","patterns":[{"name":"keyword.operator.template.left.trim.terraform","match":"\\~\\s"},{"name":"keyword.operator.template.right.trim.terraform","match":"\\s\\~"},{"name":"keyword.control.terraform","match":"\\b(if|else|endif|for|in|endfor)\\b"},{"include":"#expressions"}],"beginCaptures":{"0":{"name":"keyword.other.interpolation.begin.terraform"}},"endCaptures":{"0":{"name":"keyword.other.interpolation.end.terraform"}}},"string_literals":{"name":"string.quoted.double.terraform","begin":"\"","end":"\"","patterns":[{"include":"#string_interpolation"},{"name":"constant.character.escape.terraform","match":"\\\\[nrt\"\\\\]|\\\\u([[:xdigit:]]{8}|[[:xdigit:]]{4})"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.terraform"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.terraform"}}},"top_level_attribute_definition":{"name":"variable.declaration.terraform","match":"(\\()?(\\b(?!null|false|true)[[:alpha:]][[:alnum:]_-]*\\b)(\\))?\\s*(\\=[^\\=|\\\u003e])\\s*","captures":{"1":{"name":"punctuation.section.parens.begin.terraform"},"2":{"name":"variable.other.readwrite.terraform"},"3":{"name":"punctuation.section.parens.end.terraform"},"4":{"name":"keyword.operator.assignment.terraform"}}},"tuple_for_expression":{"begin":"\\bfor\\b","end":"(?=\\])","patterns":[{"name":"keyword.operator.word.terraform","match":"\\bin\\b"},{"name":"keyword.control.conditional.terraform","match":"\\bif\\b"},{"name":"keyword.operator.terraform","match":"\\:"},{"include":"#expressions"},{"include":"#comments"},{"include":"#comma"},{"name":"variable.other.readwrite.terraform","match":"\\b(?!null|false|true)[[:alpha:]][[:alnum:]_-]*\\b"}],"beginCaptures":{"0":{"name":"keyword.control.terraform"}}},"type_keywords":{"name":"storage.type.terraform","match":"\\b(any|string|number|bool)\\b"}}}