;ELC   
;;; Compiled
;;; in Emacs version 29.4
;;; with all optimizations.



(byte-code "\300\301!\210\300\302!\210\303\304\305\306\307DD\310\311\312\313\314\315\316\317\320&\207" [require treesit c-ts-common custom-declare-variable rust-ts-mode-indent-offset funcall function #[0 "\300\207" [4] 1 ""] "Number of spaces for each indentation step in `rust-ts-mode'." :version "29.1" :type integer :safe integerp :group rust] 12)#@34 Syntax table for `rust-ts-mode'.
(defvar rust-ts-mode--syntax-table (byte-code "\300 \301\302\303#\210\301\304\303#\210\301\305\303#\210\301\306\303#\210\301\307\303#\210\301\310\303#\210\301\311\303#\210\301\312\303#\210\301\313\303#\210\301\314\303#\210\301\315\303#\210\301\316\303#\210\301\317\320#\210\301\321\322#\210\301\323\324#\210\301\325\324#\210\207" [make-syntax-table modify-syntax-entry 43 "." 45 61 37 38 124 94 33 64 126 60 62 47 ". 124b" 42 ". 23" 10 "> b" 13] 5) (#$ . 435))#@46 Tree-sitter indent rules for `rust-ts-mode'.
(defvar rust-ts-mode--indent-rules '((rust ((parent-is "source_file") column-0 0) ((node-is ")") parent-bol 0) ((node-is "]") parent-bol 0) ((node-is "}") (and parent parent-bol) 0) ((and (parent-is "comment") c-ts-common-looking-at-star) c-ts-common-comment-start-after-first-star -1) ((parent-is "comment") prev-adaptive-prefix 0) ((parent-is "arguments") parent-bol rust-ts-mode-indent-offset) ((parent-is "await_expression") parent-bol rust-ts-mode-indent-offset) ((parent-is "array_expression") parent-bol rust-ts-mode-indent-offset) ((parent-is "binary_expression") parent-bol rust-ts-mode-indent-offset) ((parent-is "block") parent-bol rust-ts-mode-indent-offset) ((parent-is "declaration_list") parent-bol rust-ts-mode-indent-offset) ((parent-is "enum_variant_list") parent-bol rust-ts-mode-indent-offset) ((parent-is "field_declaration_list") parent-bol rust-ts-mode-indent-offset) ((parent-is "field_expression") parent-bol rust-ts-mode-indent-offset) ((parent-is "field_initializer_list") parent-bol rust-ts-mode-indent-offset) ((parent-is "let_declaration") parent-bol rust-ts-mode-indent-offset) ((parent-is "macro_definition") parent-bol rust-ts-mode-indent-offset) ((parent-is "parameters") parent-bol rust-ts-mode-indent-offset) ((parent-is "struct_pattern") parent-bol rust-ts-mode-indent-offset) ((parent-is "token_tree") parent-bol rust-ts-mode-indent-offset) ((parent-is "use_list") parent-bol rust-ts-mode-indent-offset))) (#$ . 950))#@52 Rust built-in macros for tree-sitter font-locking.
(defvar rust-ts-mode--builtin-macros '("concat_bytes" "concat_idents" "const_format_args" "format_args_nl" "log_syntax" "trace_macros" "assert" "assert_eq" "assert_ne" "cfg" "column" "compile_error" "concat" "dbg" "debug_assert" "debug_assert_eq" "debug_assert_ne" "env" "eprint" "eprintln" "file" "format" "format_args" "include" "include_bytes" "include_str" "is_x86_feature_detected" "line" "matches" "module_path" "option_env" "panic" "print" "println" "stringify" "thread_local" "todo" "try" "unimplemented" "unreachable" "vec" "write" "writeln") (#$ . 2456))#@45 Rust keywords for tree-sitter font-locking.
(defvar rust-ts-mode--keywords '("as" "async" "await" "break" "const" "continue" "dyn" "else" "enum" "extern" "fn" "for" "if" "impl" "in" "let" "loop" "match" "mod" "move" "pub" "ref" "return" "static" "struct" "trait" "type" "union" "unsafe" "use" "where" "while" (crate) (self) (super) (mutable_specifier)) (#$ . 3077))#@46 Rust operators for tree-sitter font-locking.
(defvar rust-ts-mode--operators '("!" "!=" "%" "%=" "&" "&=" "&&" "*" "*=" "+" "+=" "," "-" "-=" "->" "." ".." "..=" "..." "/" "/=" ":" ";" "<<" "<<=" "<" "<=" "=" "==" "=>" ">" ">=" ">>" ">>=" "@" "^" "^=" "|" "|=" "||" "?") (#$ . 3448))#@52 Tree-sitter font-lock settings for `rust-ts-mode'.
(defvar rust-ts-mode--font-lock-settings (byte-code "\303\304\305\306\307\310\304\305\306\311\312\304\305\306\313\314\315\316\317\320\321\322\323\324B\325BBB!\326BBEE\327B\304\305\306\330\331\304\305\306\332\333\304\305\306\334\335\304\305\306\336\337\304\305\306\340\341\304\305\306\342\343	!\344B\304\305\306\345\346\304\305\306\347\343\n!\350B\304\305\306\351\352\304\305\306\353\354\355\356\357\360\361\362\363\364\365\366\367\370\367\371\372\320\373\374BBD\375BBBBBBBBBBBBBBBB\304\305\306\376\377\304\305\306\201@ \201A \304\305\306\201B \201C \304\305\306\201D \201E \201F \201G \304\305\306\201H \201E \201F \201I &^\207" [rust-ts-mode--builtin-macros rust-ts-mode--keywords rust-ts-mode--operators treesit-font-lock-rules :language rust :feature attribute ((attribute_item) @font-lock-preprocessor-face (inner_attribute_item) @font-lock-preprocessor-face) bracket ((["(" ")" "[" "]" "{" "}"]) @font-lock-bracket-face) builtin macro_invocation macro: (identifier) @font-lock-builtin-face :match rx-to-string seq bol or (eol) (@font-lock-builtin-face) (((identifier) @font-lock-type-face (:match "\\`\\(?:Err\\|Ok\\|None\\|Some\\)\\'" @font-lock-type-face))) comment (([(block_comment) (line_comment)]) @rust-ts-mode--comment-docstring) delimiter ((["," "." ";" ":" "::"]) @font-lock-delimiter-face) definition ((function_item name: (identifier) @font-lock-function-name-face) (macro_definition "macro_rules!" @font-lock-constant-face) (macro_definition (identifier) @font-lock-preprocessor-face) (field_declaration name: (field_identifier) @font-lock-property-name-face) (parameter pattern: (_) @rust-ts-mode--fontify-pattern) (closure_parameters (_) @rust-ts-mode--fontify-pattern) (let_declaration pattern: (_) @rust-ts-mode--fontify-pattern) (for_expression pattern: (_) @rust-ts-mode--fontify-pattern) (let_condition pattern: (_) @rust-ts-mode--fontify-pattern) (match_arm pattern: (_) @rust-ts-mode--fontify-pattern)) assignment ((assignment_expression left: (_) @rust-ts-mode--fontify-pattern) (compound_assignment_expr left: (_) @rust-ts-mode--fontify-pattern)) function ((call_expression function: [(identifier) @font-lock-function-call-face (field_expression field: (field_identifier) @font-lock-function-call-face) (scoped_identifier name: (identifier) @font-lock-function-call-face)]) (generic_function function: [(identifier) @font-lock-function-call-face (field_expression field: (field_identifier) @font-lock-function-call-face) (scoped_identifier name: (identifier) @font-lock-function-call-face)]) (macro_invocation macro: (identifier) @font-lock-preprocessor-face)) keyword vconcat (@font-lock-keyword-face) number ([(float_literal) (integer_literal)] @font-lock-number-face) operator (@font-lock-operator-face) string ([(char_literal) (raw_string_literal) (string_literal)] @font-lock-string-face) type (scoped_use_list path: (identifier) @font-lock-constant-face) (scoped_use_list path: (scoped_identifier name: (identifier) @font-lock-constant-face)) ((use_as_clause alias: (identifier) @font-lock-type-face) (:match "\\`[A-Z]" @font-lock-type-face)) ((use_as_clause path: (identifier) @font-lock-type-face) (:match "\\`[A-Z]" @font-lock-type-face)) ((use_list (identifier) @font-lock-type-face) (:match "\\`[A-Z]" @font-lock-type-face)) (use_wildcard [(identifier) @rust-ts-mode--fontify-scope (scoped_identifier name: (identifier) @rust-ts-mode--fontify-scope)]) (enum_variant name: (identifier) @font-lock-type-face) (match_arm pattern: (match_pattern (_ type: (identifier) @font-lock-type-face))) (match_arm pattern: (match_pattern (_ type: (scoped_identifier path: (identifier) @font-lock-type-face)))) (mod_item name: (identifier) @font-lock-constant-face) (primitive_type) @font-lock-type-face (type_identifier) ((scoped_identifier name: (identifier) @rust-ts-mode--fontify-tail)) (scoped_identifier path: (identifier) @font-lock-type-face) "\\`\\(?:char\\|i\\(?:1\\(?:28\\|6\\)\\|32\\|64\\|8\\|size\\)\\|str\\|u\\(?:1\\(?:28\\|6\\)\\|32\\|64\\|8\\|size\\)\\)\\'" (@font-lock-type-face) (((scoped_identifier path: (identifier) @rust-ts-mode--fontify-scope)) ((scoped_type_identifier path: (identifier) @rust-ts-mode--fontify-scope)) (type_identifier) @font-lock-type-face) property ((field_identifier) @font-lock-property-use-face (shorthand_field_initializer (identifier) @font-lock-property-use-face)) constant ((boolean_literal) @font-lock-constant-face ((identifier) @font-lock-constant-face (:match "\\`[A-Z][0-9A-Z_]*\\'" @font-lock-constant-face))) variable ((arguments (identifier) @font-lock-variable-use-face) (array_expression (identifier) @font-lock-variable-use-face) (assignment_expression right: (identifier) @font-lock-variable-use-face) (binary_expression left: (identifier) @font-lock-variable-use-face) (binary_expression right: (identifier) @font-lock-variable-use-face) (block (identifier) @font-lock-variable-use-face) (compound_assignment_expr right: (identifier) @font-lock-variable-use-face) (field_expression value: (identifier) @font-lock-variable-use-face) (field_initializer value: (identifier) @font-lock-variable-use-face) (if_expression condition: (identifier) @font-lock-variable-use-face) (let_condition value: (identifier) @font-lock-variable-use-face) (let_declaration value: (identifier) @font-lock-variable-use-face) (match_arm value: (identifier) @font-lock-variable-use-face) (match_expression value: (identifier) @font-lock-variable-use-face) (reference_expression value: (identifier) @font-lock-variable-use-face) (return_expression (identifier) @font-lock-variable-use-face) (tuple_expression (identifier) @font-lock-variable-use-face) (unary_expression (identifier) @font-lock-variable-use-face) (while_expression condition: (identifier) @font-lock-variable-use-face)) escape-sequence :override t ((escape_sequence) @font-lock-escape-face) error ((ERROR) @font-lock-warning-face)] 95) (#$ . 3737))#@108 Use the comment or documentation face appropriately for comments.

(fn NODE OVERRIDE START END &rest ARGS)
(defalias 'rust-ts-mode--comment-docstring #[1156 "\300!\212\211b\210\301\302\303\"\203 \304\202 \305)\306\307	!			&\207" [treesit-node-start looking-at "/\\(?:/\\(?:/[^/]\\|!\\)\\|*\\(?:*[^*/]\\|!\\)\\)" t font-lock-doc-face font-lock-comment-face treesit-fontify-with-override treesit-node-end] 14 (#$ . 9671)])#@49 

(fn NODE OVERRIDE START END &optional TAIL-P)
(defalias 'rust-ts-mode--fontify-scope #[1284 "\301\302\303!\301\304\305$\266\203\203 \306\2025 \211\2034 \307\310\311\211!!!\301\304\305$\266\203\2034 \301\2025 \312\211\205K \313\314!\315!&)\207" [case-fold-search nil "^[A-Z]" treesit-node-text string-match t font-lock-type-face "\\`\\(?:use_list\\|call_expression\\|use_as_clause\\|use_declaration\\)\\'" treesit-node-type treesit-node-parent font-lock-constant-face treesit-fontify-with-override treesit-node-start treesit-node-end] 13 (#$ . 10107)])#@32 

(fn NODE OVERRIDE START END)
(defalias 'rust-ts-mode--fontify-tail #[1028 "\300\301%\207" [rust-ts-mode--fontify-scope t] 10 (#$ . 10690)])
(byte-code "\300\301\302 \205 \303\304\305\306\307\310\311\312\313\"EDC\314BBE\"\207" [defalias rust-ts-mode--fontify-pattern treesit-available-p lambda (node override start end &rest _) let captures treesit-query-capture node treesit-query-compile rust ((identifier) @id (shorthand_field_identifier) @id) ((pcase-dolist (`(_name \, id) captures) (unless (string-match-p "\\`scoped_\\(?:type_\\)?identifier\\'" (treesit-node-type (treesit-node-parent id))) (treesit-fontify-with-override (treesit-node-start id) (treesit-node-end id) 'font-lock-variable-name-face override start end))))] 11)#@106 Return the defun name of NODE.
Return nil if there is no name or if NODE is not a defun node.

(fn NODE)
(defalias 'rust-ts-mode--defun-name #[257 "\300!\211\301\267\202H \302\303\304\"\305\"\207\302\303\304\"\305\"\207\303\306\"\302\305\"\205& \307\302\303\310\"\305\"Q\207\302\303\304\"\305\"\207\302\303\304\"\305\"\207\302\303\304\"\305\"\207\311\207" [treesit-node-type #s(hash-table size 6 test equal rehash-size 1.5 rehash-threshold 0.8125 purecopy t data ("enum_item" 9 "function_item" 17 "impl_item" 25 "mod_item" 48 "struct_item" 56 "type_item" 64)) treesit-node-text treesit-node-child-by-field-name "name" t "trait" " for " "type" nil] 9 (#$ . 11435)])#@526 Apply syntax properties to special characters between BEG and END.

Apply syntax properties to various special characters with
contextual meaning between BEG and END.

The apostrophe \=' should be treated as string when used for char literals.

< and > are usually punctuation, e.g., as greater/less-than.  But
when used for types, they should be considered pairs.

This function checks for < and > in the changed RANGES and apply
appropriate text property to alter the syntax of template
delimiters < and >'s.

(fn BEG END)
(defalias 'rust-ts-mode--syntax-propertize #[514 "b\210\300\301\302#\203\" \303\304\305\224!!\306\230\203 \307\305\224\305\225\310\311$\210\202 b\210\312\313\302#\205[ \303\314\304\305\224!!!\211\315\235\203W \307\305\224\305\225\310`Sf\211\316\267\202R \317\202S \320\202S \321\262$\210\210\202% \207" [search-forward "'" t treesit-node-type treesit-node-at 0 "char_literal" put-text-property syntax-table (7) re-search-forward "[<>]" treesit-node-parent ("type_parameters" "type_arguments") #s(hash-table size 2 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (60 74 62 78)) (4 . 62) (5 . 60) nil] 10 (#$ . 12117)])
(defvar rust-ts-mode-hook nil)
(byte-code "\300\301N\204\f \302\300\301\303#\210\304\305!\204 \302\305\306\307#\210\300\207" [rust-ts-mode-hook variable-documentation put "Hook run after entering Rust mode.\nNo problems result if this variable is not bound.\n`add-hook' automatically binds it.  (This is true for all hook variables.)" boundp rust-ts-mode-map definition-name rust-ts-mode] 4)
(defvar rust-ts-mode-map (make-sparse-keymap))
(byte-code "\301\302N\204 \303\301\302\304\305!#\210\306\300!\204. \303\300\307\310#\210\311\300\306\300!\203& \312\202, \313\300\312\"\210\"\210\300\302N\204< \303\300\302\304\314!#\210\303\310\315\316#\210\303\310\317\320#\207" [rust-ts-mode-abbrev-table rust-ts-mode-map variable-documentation put purecopy "Keymap for `rust-ts-mode'." boundp definition-name rust-ts-mode defvar-1 nil define-abbrev-table "Abbrev table for `rust-ts-mode'." derived-mode-parent prog-mode custom-mode-group rust] 5)#@246 Major mode for editing Rust, powered by tree-sitter.

In addition to any hooks its parent mode `prog-mode' might have run,
this mode runs the hook `rust-ts-mode-hook', as the final or
penultimate step during initialization.

\{rust-ts-mode-map}
(defalias 'rust-ts-mode #[0 "\306\300!\210\307\310 \210\311\312\310\313N\203 \314\311\313\310\313N#\210\315!\204' \316\317 \"\210\320\f\321\"\204; \f=\204; \322\f\321C#\210\323!\210\324-!\210\f\325\326!\203\233 \327\326!\210\306\330!\210\331\332 \210\306\333!\210.\306\334!\210\335\306\336!\210\337\306\340!\210\341 \306\342!\210/\"\306\343!\210\344\345#\"#\306\346!\210\347&\306\350!\210\351(\352 \210)\353\354!\207" [delay-mode-hooks major-mode mode-name rust-ts-mode-map rust-ts-mode-abbrev-table local-abbrev-table make-local-variable t prog-mode rust-ts-mode "Rust" mode-class put keymap-parent set-keymap-parent current-local-map abbrev-table-get :parents abbrev-table-put use-local-map set-syntax-table treesit-ready-p rust treesit-parser-create syntax-propertize-function rust-ts-mode--syntax-propertize c-ts-common-comment-setup treesit-font-lock-settings treesit-font-lock-feature-list ((comment definition) (keyword string) (assignment attribute builtin constant escape-sequence number type) (bracket delimiter error function operator property variable)) treesit-simple-imenu-settings (("Module" "\\`mod_item\\'" nil nil) ("Enum" "\\`enum_item\\'" nil nil) ("Impl" "\\`impl_item\\'" nil nil) ("Type" "\\`type_item\\'" nil nil) ("Struct" "\\`struct_item\\'" nil nil) ("Fn" "\\`function_item\\'" nil nil)) indent-tabs-mode nil treesit-simple-indent-rules electric-indent-chars append "{}():;,#" treesit-defun-type-regexp "\\(?:\\(?:enum\\|function\\|impl\\|struct\\)_item\\)" treesit-defun-name-function rust-ts-mode--defun-name treesit-major-mode-setup run-mode-hooks rust-ts-mode-hook rust-ts-mode--syntax-table rust-ts-mode--font-lock-settings rust-ts-mode--indent-rules] 5 (#$ . 14231) nil])
(byte-code "\300\301!\203 \302\303\304\"\210\305\306!\207" [treesit-ready-p rust add-to-list auto-mode-alist ("\\.rs\\'" . rust-ts-mode) provide rust-ts-mode] 3)
