github-linguist 7.4.0 → 7.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +5 -5
  2. data/grammars/annotation.liquidhaskell.haskell.json +15 -4
  3. data/grammars/hint.haskell.json +15 -4
  4. data/grammars/hint.message.haskell.json +15 -4
  5. data/grammars/hint.type.haskell.json +15 -4
  6. data/grammars/source.abap.json +14 -3
  7. data/grammars/source.apl.json +19 -2
  8. data/grammars/source.ats.json +17 -87
  9. data/grammars/source.ballerina.json +14 -19
  10. data/grammars/source.crystal.json +14 -2
  11. data/grammars/source.csound.json +37 -0
  12. data/grammars/source.css.json +25 -1
  13. data/grammars/source.css.scss.json +1724 -0
  14. data/grammars/source.gf.json +51 -0
  15. data/grammars/source.glsl.json +1 -1
  16. data/grammars/source.hack.json +2523 -0
  17. data/grammars/source.haskell.json +15 -4
  18. data/grammars/source.hc.json +709 -0
  19. data/grammars/source.hsig.json +15 -4
  20. data/grammars/source.hx.json +10 -6
  21. data/grammars/source.jolie.json +1 -1
  22. data/grammars/source.julia.json +114 -6
  23. data/grammars/source.m68k.json +412 -0
  24. data/grammars/source.mcfunction.json +62 -18
  25. data/grammars/source.objectscript.json +309 -0
  26. data/grammars/source.objectscript_class.json +674 -0
  27. data/grammars/source.objectscript_csp.json +19 -0
  28. data/grammars/source.objectscript_macros.json +226 -0
  29. data/grammars/source.powershell.json +21 -57
  30. data/grammars/source.rust.json +1 -1
  31. data/grammars/source.sass.json +836 -142
  32. data/grammars/source.sassdoc.json +346 -0
  33. data/grammars/source.scala.json +110 -10
  34. data/grammars/source.sqf.json +2 -1
  35. data/grammars/source.svelte.json +827 -0
  36. data/grammars/source.ts.json +8 -4
  37. data/grammars/source.tsql.json +507 -0
  38. data/grammars/source.tsx.json +8 -4
  39. data/grammars/source.viml.json +1 -1
  40. data/grammars/source.vtt.json +702 -0
  41. data/grammars/source.wollok.json +100 -0
  42. data/grammars/source.xojo.json +85 -0
  43. data/grammars/source.yara.json +3 -2
  44. data/grammars/source.zeek.json +412 -0
  45. data/grammars/source.zenscript.json +282 -0
  46. data/grammars/source.zig.json +2 -11
  47. data/grammars/text.haml.json +1 -1
  48. data/grammars/text.html.php.blade.json +3 -3
  49. data/grammars/text.html.vue.json +41 -1
  50. data/grammars/text.slim.json +1 -1
  51. data/grammars/text.tex.latex.haskell.json +15 -4
  52. data/grammars/version +1 -1
  53. data/lib/linguist/VERSION +1 -1
  54. data/lib/linguist/blob_helper.rb +5 -10
  55. data/lib/linguist/generated.rb +10 -2
  56. data/lib/linguist/heuristics.yml +14 -3
  57. data/lib/linguist/language.rb +3 -2
  58. data/lib/linguist/languages.json +1 -1
  59. data/lib/linguist/languages.yml +151 -16
  60. data/lib/linguist/samples.json +9844 -1711
  61. data/lib/linguist/samples.rb +8 -5
  62. data/lib/linguist/shebang.rb +6 -0
  63. data/lib/linguist/vendor.yml +3 -0
  64. metadata +25 -10
  65. data/grammars/source.bro.json +0 -403
  66. data/grammars/source.scss.json +0 -1287
@@ -17,12 +17,15 @@ module Linguist
17
17
  # Path for serialized samples db
18
18
  PATH = File.expand_path('../samples.json', __FILE__)
19
19
 
20
- # Hash of serialized samples object
20
+ # Hash of serialized samples object, cached in memory
21
21
  def self.cache
22
- @cache ||= begin
23
- serializer = defined?(Yajl) ? Yajl : YAML
24
- serializer.load(File.read(PATH, encoding: 'utf-8'))
25
- end
22
+ @cache ||= load_samples
23
+ end
24
+
25
+ # Hash of serialized samples object, uncached
26
+ def self.load_samples
27
+ serializer = defined?(Yajl) ? Yajl : YAML
28
+ serializer.load(File.read(PATH, encoding: 'utf-8'))
26
29
  end
27
30
 
28
31
  # Public: Iterate over each sample.
@@ -58,6 +58,12 @@ module Linguist
58
58
  script = $1
59
59
  end
60
60
 
61
+ # osascript can be called with an optional `-l <language>` argument, which may not be a language with an interpreter.
62
+ # In this case, return and rely on the subsequent strategies to determine the language.
63
+ if script == 'osascript'
64
+ return if s.scan_until(/\-l\s?/)
65
+ end
66
+
61
67
  File.basename(script)
62
68
  end
63
69
  end
@@ -89,6 +89,9 @@
89
89
  # Select2
90
90
  - (^|/)select2/.*\.(css|scss|js)$
91
91
 
92
+ # Bulma css
93
+ - (^|/)bulma\.(css|sass|scss)$
94
+
92
95
  # Vendored dependencies
93
96
  - (3rd|[Tt]hird)[-_]?[Pp]arty/
94
97
  - vendors?/
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.4.0
4
+ version: 7.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitHub
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-17 00:00:00.000000000 Z
11
+ date: 2019-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: charlock_holmes
@@ -39,19 +39,19 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.2.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: mime-types
42
+ name: mini_mime
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.19'
47
+ version: '1.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.19'
54
+ version: '1.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rugged
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -293,7 +293,6 @@ files:
293
293
  - grammars/source.boo.json
294
294
  - grammars/source.brightauthorproject.json
295
295
  - grammars/source.brightscript.json
296
- - grammars/source.bro.json
297
296
  - grammars/source.bsl.json
298
297
  - grammars/source.bsv.json
299
298
  - grammars/source.c++.json
@@ -333,6 +332,7 @@ files:
333
332
  - grammars/source.css.less.json
334
333
  - grammars/source.css.mss.json
335
334
  - grammars/source.css.postcss.sugarss.json
335
+ - grammars/source.css.scss.json
336
336
  - grammars/source.csx.json
337
337
  - grammars/source.cuda-c++.json
338
338
  - grammars/source.curlrc.json
@@ -384,6 +384,7 @@ files:
384
384
  - grammars/source.gdbregs.json
385
385
  - grammars/source.gdscript.json
386
386
  - grammars/source.gerber.json
387
+ - grammars/source.gf.json
387
388
  - grammars/source.gfm.json
388
389
  - grammars/source.gitattributes.json
389
390
  - grammars/source.gitconfig.json
@@ -398,9 +399,11 @@ files:
398
399
  - grammars/source.graphql.json
399
400
  - grammars/source.groovy.gradle.json
400
401
  - grammars/source.groovy.json
402
+ - grammars/source.hack.json
401
403
  - grammars/source.haproxy-config.json
402
404
  - grammars/source.harbour.json
403
405
  - grammars/source.haskell.json
406
+ - grammars/source.hc.json
404
407
  - grammars/source.hgignore.json
405
408
  - grammars/source.hlsl.json
406
409
  - grammars/source.hql.json
@@ -459,6 +462,7 @@ files:
459
462
  - grammars/source.ltspice.symbol.json
460
463
  - grammars/source.lua.json
461
464
  - grammars/source.m4.json
465
+ - grammars/source.m68k.json
462
466
  - grammars/source.makefile.json
463
467
  - grammars/source.makegen.json
464
468
  - grammars/source.man-conf.json
@@ -503,6 +507,10 @@ files:
503
507
  - grammars/source.objc++.json
504
508
  - grammars/source.objc.json
505
509
  - grammars/source.objc.platform.json
510
+ - grammars/source.objectscript.json
511
+ - grammars/source.objectscript_class.json
512
+ - grammars/source.objectscript_csp.json
513
+ - grammars/source.objectscript_macros.json
506
514
  - grammars/source.ocaml.json
507
515
  - grammars/source.ocamllex.json
508
516
  - grammars/source.ocamlyacc.json
@@ -578,12 +586,12 @@ files:
578
586
  - grammars/source.rust.json
579
587
  - grammars/source.sas.json
580
588
  - grammars/source.sass.json
589
+ - grammars/source.sassdoc.json
581
590
  - grammars/source.scad.json
582
591
  - grammars/source.scala.json
583
592
  - grammars/source.scaml.json
584
593
  - grammars/source.scheme.json
585
594
  - grammars/source.scilab.json
586
- - grammars/source.scss.json
587
595
  - grammars/source.sdbl.json
588
596
  - grammars/source.sed.json
589
597
  - grammars/source.shaderlab.json
@@ -605,6 +613,7 @@ files:
605
613
  - grammars/source.strings.json
606
614
  - grammars/source.stylus.json
607
615
  - grammars/source.supercollider.json
616
+ - grammars/source.svelte.json
608
617
  - grammars/source.swift.json
609
618
  - grammars/source.systemverilog.json
610
619
  - grammars/source.tcl.json
@@ -617,6 +626,7 @@ files:
617
626
  - grammars/source.toc.json
618
627
  - grammars/source.toml.json
619
628
  - grammars/source.ts.json
629
+ - grammars/source.tsql.json
620
630
  - grammars/source.tsx.json
621
631
  - grammars/source.turing.json
622
632
  - grammars/source.turtle.json
@@ -629,17 +639,20 @@ files:
629
639
  - grammars/source.verilog.json
630
640
  - grammars/source.vhdl.json
631
641
  - grammars/source.viml.json
642
+ - grammars/source.vtt.json
632
643
  - grammars/source.vyper.json
633
644
  - grammars/source.wavefront.mtl.json
634
645
  - grammars/source.wavefront.obj.json
635
646
  - grammars/source.wdl.json
636
647
  - grammars/source.webassembly.json
637
648
  - grammars/source.webidl.json
649
+ - grammars/source.wollok.json
638
650
  - grammars/source.x10.json
639
651
  - grammars/source.x86.json
640
652
  - grammars/source.x86asm.json
641
653
  - grammars/source.xc.json
642
654
  - grammars/source.xlfd.json
655
+ - grammars/source.xojo.json
643
656
  - grammars/source.xq.json
644
657
  - grammars/source.xtend.json
645
658
  - grammars/source.yaml-ext.json
@@ -649,6 +662,8 @@ files:
649
662
  - grammars/source.yara.json
650
663
  - grammars/source.yasnippet.json
651
664
  - grammars/source.zap.json
665
+ - grammars/source.zeek.json
666
+ - grammars/source.zenscript.json
652
667
  - grammars/source.zig.json
653
668
  - grammars/source.zil.json
654
669
  - grammars/text.bibtex.json
@@ -777,7 +792,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
777
792
  version: '0'
778
793
  requirements: []
779
794
  rubyforge_project:
780
- rubygems_version: 2.7.6
795
+ rubygems_version: 2.6.14
781
796
  signing_key:
782
797
  specification_version: 4
783
798
  summary: GitHub Language detection
@@ -1,403 +0,0 @@
1
- {
2
- "name": "Bro",
3
- "scopeName": "source.bro",
4
- "patterns": [
5
- {
6
- "include": "#directives"
7
- },
8
- {
9
- "name": "string.quoted.double.bro",
10
- "begin": "\"",
11
- "end": "\"",
12
- "patterns": [
13
- {
14
- "include": "#string_escaped_char"
15
- },
16
- {
17
- "include": "#string_placeholder"
18
- }
19
- ],
20
- "beginCaptures": {
21
- "0": {
22
- "name": "punctuation.definition.string.begin.bro"
23
- }
24
- },
25
- "endCaptures": {
26
- "0": {
27
- "name": "punctuation.definition.string.end.bro"
28
- }
29
- }
30
- },
31
- {
32
- "name": "string.quoted.regexp.bro",
33
- "begin": "(?\u003c=in|\\=|,|\\()\\s*(/)",
34
- "end": "(?\u003c!\\\\)/",
35
- "patterns": [
36
- {
37
- "include": "#string_escaped_char"
38
- },
39
- {
40
- "include": "#string_placeholder"
41
- }
42
- ],
43
- "beginCaptures": {
44
- "0": {
45
- "name": "punctuation.definition.string.begin.bro"
46
- }
47
- },
48
- "endCaptures": {
49
- "0": {
50
- "name": "punctuation.definition.string.end.bro"
51
- }
52
- }
53
- },
54
- {
55
- "name": "meta.function.bro",
56
- "match": "^\\s*(function|hook|event)\\s+((?:(?:[a-zA-Z_][0-9a-zA-Z_]*)(?:::))?[0-9a-zA-Z_]+)\\s+\\((?:([a-zA-Z0-9_]+), ([a-zA-Z0-9_]+))*\\)(?:\\s*:\\s*([a-zA-Z0-9_]+))",
57
- "patterns": [
58
- {
59
- "include": "#types"
60
- },
61
- {
62
- "include": "#attributes"
63
- },
64
- {
65
- "include": "#operator"
66
- },
67
- {
68
- "include": "#constants"
69
- }
70
- ],
71
- "captures": {
72
- "1": {
73
- "name": "storage.type.function.bro"
74
- },
75
- "2": {
76
- "name": "entity.name.function.bro"
77
- },
78
- "3": {
79
- "name": "variable.parameter.bro"
80
- },
81
- "4": {
82
- "name": "storage.type.bro"
83
- }
84
- }
85
- },
86
- {
87
- "name": "comment.line.number-sign.bro",
88
- "begin": "#",
89
- "end": "$",
90
- "beginCaptures": {
91
- "0": {
92
- "name": "punctuation.definition.comment.bro"
93
- }
94
- }
95
- },
96
- {
97
- "include": "#builtin-functions"
98
- },
99
- {
100
- "include": "#statements"
101
- },
102
- {
103
- "include": "#declarations"
104
- },
105
- {
106
- "include": "#attributes"
107
- },
108
- {
109
- "include": "#constants"
110
- },
111
- {
112
- "include": "#types"
113
- },
114
- {
115
- "include": "#operator"
116
- }
117
- ],
118
- "repository": {
119
- "attributes": {
120
- "patterns": [
121
- {
122
- "name": "storage.modifier.bro",
123
- "match": "\u0026(redef|priority|log|optional|default|add_func|delete_func|expire_func|read_expire|write_expire|create_expire|synchronized|persistent|rotate_interval|rotate_size|encrypt|raw_output|mergeable|group|error_handler|type_column)"
124
- }
125
- ]
126
- },
127
- "builtin-functions": {
128
- "patterns": [
129
- {
130
- "name": "meta.function-call.bro.bif.bro",
131
- "match": "(?\u003c!\\$)\\b(active_file|addr_to_counts|addr_to_ptr_name|all_set|anonymize_addr|any_set|bro_is_terminating|bro_version|bytestring_to_count|bytestring_to_double|bytestring_to_hexstr|calc_next_rotate|capture_events|capture_state_updates|cat|cat_sep|checkpoint_state|clear_table|close|complete_handshake|connect|connection_exists|continue_processing|convert_for_pattern|count_to_port|count_to_v4_addr|counts_to_v4_addr|counts_to_addr|current_analyzer|current_time|decode_base64|decode_base64_custom|disable_analyzer|disable_print_hook|disconnect|do_profiling|double_to_count|double_to_interval|double_to_time|dump_current_packet|dump_packet|dump_rule_stats|enable_communication|enable_raw_output|encode_base64|encode_base64_custom|entropy_test_add|entropy_test_finish|entropy_test_init|enum_to_int|exit|exp|file_magic|file_mode|file_size|find_entropy|floor|flush_all|fmt|get_conn_transport_proto|get_current_packet|get_event_peer|get_file_name|get_local_event_peer|get_matcher_stats|get_port_transport_proto|getenv|gethostname|getpid|global_ids|global_sizes|hexstr_to_bytestring|identify_data|install_dst_addr_filter|install_dst_net_filter|install_pcap_filter|install_src_addr_filter|install_src_net_filter|int_to_count|interval_to_double|interval_to_int|is_external_connection|is_icmp_port|is_local_interface|is_remote_event|is_tcp_port|is_udp_port|is_v4_addr|is_v6_addr|listen|ln|log10|lookup_ID|lookup_addr|lookup_asn|lookup_connection|lookup_hostname|lookup_hostname_txt|lookup_location|mask_addr|match_signatures|md5_hash|md5_hash_finish|md5_hash_init|md5_hash_update|md5_hmac|merge_pattern|mkdir|net_stats|network_time|open|open_for_append|order|pcap_error|piped_exec|port_to_count|precompile_pcap_filter|preserve_prefix|preserve_subnet|ptr_name_to_addr|rand|raw_bytes_to_v4_addr|reading_live_traffic|record_fields|record_type_to_vector|remask_addr|request_remote_events|request_remote_logs|request_remote_sync|rescan_state|resize|resource_usage|resume_state_updates|rotate_file|rotate_file_by_name|routing0_data_to_addrs|same_object|send_capture_filter|send_current_packet|send_id|send_ping|send_state|set_accept_state|set_buf|set_compression_level|set_inactivity_timeout|set_record_packets|setenv|sha1_hash|sha1_hash_finish|sha1_hash_init|sha1_hash_update|sha256_hash|sha256_hash_finish|sha256_hash_init|sha256_hash_update|skip_further_processing|sort|sqrt|srand|strftime|string_to_pattern|strptime|suspend_processing|suspend_state_updates|syslog|system|system_env|terminate|terminate_communication|time_to_double|to_addr|to_count|to_double|to_int|to_port|to_subnet|type_name|uninstall_dst_addr_filter|uninstall_dst_net_filter|uninstall_src_addr_filter|uninstall_src_net_filter|unique_id|unique_id_from|uuid_to_string|val_size|write_file)\\s*(?=\\()",
132
- "captures": {
133
- "1": {
134
- "name": "support.function.builtin.bro"
135
- }
136
- }
137
- },
138
- {
139
- "name": "meta.function-call.strings.bif.bro",
140
- "match": "(?\u003c!\\$)\\b(cat_string_array|cat_string_array_n|clean|edit|escape_string|find_all|find_last|gsub|hexdump|is_ascii|join_string_array|join_string_vec|levenshtein_distance|reverse|sort_string_array|split|split1|split_all|split_n|str_shell_escape|str_smith_waterman|str_split|strcmp|string_cat|string_fill|string_to_ascii_hex|strip|strstr|sub|sub_bytes|subst_string|to_lower|to_string_literal|to_upper)(?=\\()",
141
- "captures": {
142
- "1": {
143
- "name": "support.function.builtin.bro"
144
- }
145
- }
146
- },
147
- {
148
- "name": "meta.function-call.reporter.bif.bro",
149
- "match": "(?\u003c!\\$)\\b(Reporter::(?:error|fatal|info|warning))(?=\\()",
150
- "captures": {
151
- "1": {
152
- "name": "support.function.builtin.bro"
153
- }
154
- }
155
- },
156
- {
157
- "name": "meta.event-call.event.bif.bro",
158
- "match": "(?\u003c!\\$)\\b(OS_version_found|ack_above_hole|bro_done|bro_init|bro_script_loaded|conn_stats|conn_weird|connection_external|connection_flow_label_changed|connection_reused|connection_state_remove|connection_status_update|connection_timeout|content_gap|dns_mapping_altered|dns_mapping_lost_name|dns_mapping_new_name|dns_mapping_unverified|dns_mapping_valid|esp_packet|event_queue__flush_point|file_gap|file_new|file_opened|file_over_new_connection|file_state_remove|file_timeout|finished_send_state|flow_weird|gap_report|get_file_handle|ipv6_ext_headers|load_sample|mobile_ipv6_message|net_weird|new_connection|new_event|new_packet|packet_contents|profiling_update|protocol_confirmation|protocol_violation|remote_capture_filter|remote_connection_closed|remote_connection_error|remote_connection_established|remote_connection_handshake_done|remote_event_registered|remote_log|remote_log_peer|remote_pong|remote_state_access_performed|remote_state_inconsistency|reporter_error|reporter_info|reporter_warning|rexmit_inconsistency|scheduled_analyzer_applied|signature_match|software_parse_error|software_unparsed_version_found|software_version_found|tunnel_changed|udp_session_done)\\s*(?=\\()",
159
- "captures": {
160
- "1": {
161
- "name": "support.function.builtin.bro"
162
- }
163
- }
164
- },
165
- {
166
- "name": "meta.event-call.deprecated.bro",
167
- "match": "(?\u003c!\\$)\\b(anonymization_mapping|gaobot_signature_found|kazaa_signature_found|napster_signature_found|print_hook|root_backdoor_signature_found|rotate_interval|rotate_size)(?=\\()",
168
- "captures": {
169
- "1": {
170
- "name": "invalid.deprecated.bro"
171
- }
172
- }
173
- }
174
- ]
175
- },
176
- "constants": {
177
- "patterns": [
178
- {
179
- "name": "constant.other.subnet.bro",
180
- "match": "\\b((25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])/(3[0-2]|[1-2]?[0-9])\\b"
181
- },
182
- {
183
- "name": "constant.other.subnet6.bro",
184
- "match": "\\[(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\]/(12[0-8]|1[0-1][0-9]|[1-2]?[0-9]|[0-9][0-9])"
185
- },
186
- {
187
- "name": "constant.other.ip.bro",
188
- "match": "(?\u003c!::)\\b((25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\\b(?!/)"
189
- },
190
- {
191
- "name": "constant.other.ip6.bro",
192
- "match": "\\[(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\](?!/)"
193
- },
194
- {
195
- "name": "constant.other.port.bro",
196
- "match": "\\b((6[0-5]{2}[0-3][0-5]|[1-5]?[0-9]{1,4})/(tcp|udp|icmp))\\b"
197
- },
198
- {
199
- "name": "constant.other.interval.bro",
200
- "match": "\\b((\\s*-?)([0-9]+)\\s?((sec|min|hr|day)s?))\\b"
201
- },
202
- {
203
- "name": "constant.numeric.double.bro",
204
- "match": "(?\u003c![0-9])(\\s*-?)\\.\\b([0-9]*)\\b(?!\\.)|(?\u003c!\\.)(\\s*-?)\\b([0-9]+\\.[0-9]+)\\b(?!\\.)"
205
- },
206
- {
207
- "name": "constant.numeric.integer.hexadecimal.bro",
208
- "match": "\\b(0(x|X)[0-9a-fA-F]+)\\b"
209
- },
210
- {
211
- "name": "constant.numeric.integer.decimal.bro",
212
- "match": "(?\u003c!\\.|:)(\\s*-?)\\b([0-9]+)\\b(?!\\.|:|/|\\s((sec|min|day)s?))"
213
- },
214
- {
215
- "name": "constant.language.boolean.bro",
216
- "match": "\\b(T|F)\\b"
217
- }
218
- ]
219
- },
220
- "declarations": {
221
- "patterns": [
222
- {
223
- "name": "keyword.control.import.bro",
224
- "match": "^\\s*(module)\\s+([a-zA-Z_][0-9a-zA-Z_-]*)",
225
- "captures": {
226
- "2": {
227
- "name": "storage.modifier.namespace.bro"
228
- }
229
- }
230
- },
231
- {
232
- "name": "keyword.control.export.bro",
233
- "match": "\\b(export)\\b"
234
- },
235
- {
236
- "name": "storage.modifier.declaration.bro",
237
- "match": "\\b(type|const|global|local|redef|function|event|hook)\\b"
238
- }
239
- ]
240
- },
241
- "directives": {
242
- "patterns": [
243
- {
244
- "name": "meta.preprocessor.bro",
245
- "begin": "^\\s*(\\@(?:load|load-sigs|unload))\\s+(.*)\\b",
246
- "end": "$",
247
- "captures": {
248
- "1": {
249
- "name": "keyword.control.import.bro"
250
- },
251
- "2": {
252
- "name": "meta.definition.bro"
253
- }
254
- }
255
- },
256
- {
257
- "name": "meta.preprocessor.bro",
258
- "begin": "^\\s*(\\@prefixes)\\s+(=|\\+=)\\s+([a-zA-Z_][0-9a-zA-Z_-]+)\\b",
259
- "end": "$",
260
- "captures": {
261
- "1": {
262
- "name": "keyword.control.def.bro"
263
- },
264
- "2": {
265
- "name": "keyword.operator.assignment.bro"
266
- },
267
- "3": {
268
- "name": "text.plain.bro"
269
- }
270
- }
271
- },
272
- {
273
- "name": "meta.preprocessor.bro",
274
- "match": "^\\s*(\\@)(if|ifdef|ifndef|else|endif)\\b",
275
- "captures": {
276
- "1": {
277
- "name": "keyword.other.directive.bro"
278
- },
279
- "2": {
280
- "name": "keyword.control.directive.bro"
281
- }
282
- }
283
- },
284
- {
285
- "name": "meta.preprocessor.bro",
286
- "match": "(\\@DEBUG|\\@DIR|\\@FILENAME)",
287
- "captures": {
288
- "1": {
289
- "name": "constant.other.placeholder.bro"
290
- }
291
- }
292
- }
293
- ]
294
- },
295
- "generic_names": {
296
- "match": "[A-Za-z_][A-Za-z0-9_]*"
297
- },
298
- "illegal_names": {
299
- "patterns": [
300
- {
301
- "name": "invalid.illegal.name.type.bro",
302
- "match": "(bool|int|count|double|time|interval|string|pattern|enum|port|addr|subnet|any|table|set|vector|record|opaque|file|function|event|hook)"
303
- }
304
- ]
305
- },
306
- "operator": {
307
- "patterns": [
308
- {
309
- "name": "keyword.operator.bro",
310
- "match": "\\b(of)\\b"
311
- },
312
- {
313
- "name": "keyword.operator.logical.bro",
314
- "match": "(\\!|\u0026\u0026|\\|\\||\\b(in)\\b)"
315
- },
316
- {
317
- "name": "keyword.operator.comparison.bro",
318
- "match": "(\u003c|\u003c\\=|\u003e\\=|\u003e|\\=\\=|\\!\\=)"
319
- },
320
- {
321
- "name": "keyword.operator.assignment.augmented.bro",
322
- "match": "(\\+\\=|-\\=|\\*\\=|/\\=)"
323
- },
324
- {
325
- "name": "keyword.operator.increment-decrement.bro",
326
- "match": "(\\+\\+|\\-\\-)"
327
- },
328
- {
329
- "name": "keyword.operator.arithmetic.bro",
330
- "match": "(\\+|\\-|\\*|/|%)(?!\\+|\\-)"
331
- },
332
- {
333
- "name": "keyword.operator.assignment.bro",
334
- "match": "(\\=)"
335
- },
336
- {
337
- "name": "keyword.operator.length.bro",
338
- "match": "(?\u003c!\\|)(\\|)(?!\\|)"
339
- }
340
- ]
341
- },
342
- "statements": {
343
- "patterns": [
344
- {
345
- "name": "keyword.control.flow.bro",
346
- "match": "\\b(add|delete|print|for|next|break|if|else|switch|case|default|break|fallthrough|when|timeout|schedule|return)\\b"
347
- }
348
- ]
349
- },
350
- "string_escaped_char": {
351
- "patterns": [
352
- {
353
- "name": "constant.character.escape.bro",
354
- "match": "\\\\(\\\\|[abefnprtv'\"?]|[0-3]\\d{0,2}|[4-7]\\d?|x[a-fA-F0-9]{0,2})"
355
- },
356
- {
357
- "name": "constant.character.escape.bro",
358
- "match": "\\\\(\\\\|[/\\^\\$\\{\\}\\[\\]\\(\\)\\.\\*\\+\\?\\|\\-])"
359
- },
360
- {
361
- "name": "invalid.illegal.unknown-escape.bro",
362
- "match": "\\\\."
363
- }
364
- ]
365
- },
366
- "string_placeholder": {
367
- "patterns": [
368
- {
369
- "name": "constant.other.placeholder.bro",
370
- "match": "(?x)%\n\t\t\t\t\t\t(\\d+\\$)? # field (argument #)\n\t\t\t\t\t\t[#0\\- +']* # flags\n\t\t\t\t\t\t[,;:_]? # separator character (AltiVec)\n\t\t\t\t\t\t((-?\\d+)|\\*(-?\\d+\\$)?)? # minimum field width\n\t\t\t\t\t\t(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)? # precision\n\t\t\t\t\t\t(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)? # length modifier\n\t\t\t\t\t\t[diouxXDOUeEfFgGaACcSspn%] # conversion type\n\t\t\t\t\t"
371
- },
372
- {
373
- "name": "invalid.illegal.placeholder.bro",
374
- "match": "%"
375
- }
376
- ]
377
- },
378
- "types": {
379
- "patterns": [
380
- {
381
- "name": "storage.type.bro",
382
- "match": "\\b(bool|count|int|double|time|interval|string|pattern|port|addr|subnet|time|enum|record|function|event|hook|file|opaque|any)\\b"
383
- },
384
- {
385
- "name": "invalid.deprecated.type.bro",
386
- "match": "\\b(addr_set|addr_vec|any_vec|count_set|id_table|index_vec|record_field_table|string_array|string_set|string_vec|sw_substring_vec|table_string_of_string)\\b"
387
- },
388
- {
389
- "name": "storage.type.bro",
390
- "match": "\\bset\\s*\\[\\s*[a-zA-Z_][0-9a-zA-Z_-]+\\s*\\]"
391
- },
392
- {
393
- "name": "storage.type.bro",
394
- "match": "\\b(table|set)\\s*\\[\\s*[a-zA-Z_][0-9a-zA-Z_-]+\\s*\\]\\s+of\\s+"
395
- },
396
- {
397
- "name": "storage.type.bro",
398
- "match": "\\b(opaque|vector)\\s+of\\s+[a-zA-Z_][0-9a-zA-Z_-]+\\s*"
399
- }
400
- ]
401
- }
402
- }
403
- }