summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Tham <pickfire@riseup.net>2020-05-30 19:34:59 +0800
committerIvan Tham <pickfire@riseup.net>2020-05-31 11:47:47 +0800
commit4ccb5fd315641aed96ebdcd9391f03bd22e3f541 (patch)
tree76593ed30951f2ade4a3629a5ae94a9838e76246
parent479790633bd6c3c7a2845230d568563abfdc9868 (diff)
Highlight doc tests in rust
Feels a big laggy when system overloaded
-rw-r--r--rc/filetype/rust.kak31
-rw-r--r--test/highlight/rust/comment/cmd1
-rw-r--r--test/highlight/rust/comment/in88
-rw-r--r--test/highlight/rust/comment/rc3
-rw-r--r--test/highlight/rust/comment/script7
5 files changed, 127 insertions, 3 deletions
diff --git a/rc/filetype/rust.kak b/rc/filetype/rust.kak
index 69392cf7..8dfd0929 100644
--- a/rc/filetype/rust.kak
+++ b/rc/filetype/rust.kak
@@ -34,9 +34,34 @@ add-highlighter shared/rust regions
add-highlighter shared/rust/code default-region group
add-highlighter shared/rust/string region %{(?<!')"} (?<!\\)(\\\\)*" fill string
add-highlighter shared/rust/raw_string region -match-capture %{(?<!')r(#*)"} %{"(#*)} fill string
-add-highlighter shared/rust/comment region -recurse "/\*" "/\*" "\*/" fill comment
-add-highlighter shared/rust/documentation region "//[!/]" "$" fill documentation
-add-highlighter shared/rust/line_comment region "//" "$" fill comment
+
+add-highlighter shared/rust/line_doctest region ^\h*//[!/]\h*```($|should_panic|no_run|ignore|allow_fail|rust|test_harness|compile_fail|E\d{4}|edition201[58]) ^\h*//[!/]\h*```$ regions
+add-highlighter shared/rust/line_doctest/marker region ```.* $ group
+add-highlighter shared/rust/line_doctest/marker/fence regex ``` 0:meta
+add-highlighter shared/rust/line_doctest/marker/keywords regex [\d\w] 0:meta # already matched above, just ignore comma
+add-highlighter shared/rust/line_doctest/inner region '^\h*//[!/]\h+#' ' ' group
+add-highlighter shared/rust/line_doctest/inner/comment regex //[!/] 0:documentation
+add-highlighter shared/rust/line_doctest/inner/hidden regex '#' 0:meta
+add-highlighter shared/rust/line_doctest/comment region ^\h*//[!/] ' ' fill documentation
+add-highlighter shared/rust/line_doctest/code default-region ref rust
+add-highlighter shared/rust/line_code_rest region ^\h*//[!/]\h*``` ^\h*//[!/]\h*```$ fill documentation # reset invalid doctest
+add-highlighter shared/rust/line_comment2 region //[!/]{2} $ fill comment
+add-highlighter shared/rust/line_doc region //[!/] $ fill documentation
+add-highlighter shared/rust/line_comment1 region // $ fill comment
+
+add-highlighter shared/rust/block_comment2 region -recurse /\*\*\* /\*\*\* \*/ fill comment
+add-highlighter shared/rust/block_doc region -recurse /\*\* /\*\* \*/ regions
+add-highlighter shared/rust/block_doc/doctest region ```($|should_panic|no_run|ignore|allow_fail|rust|test_harness|compile_fail|E\d{4}|edition201[58]) ```$ regions
+add-highlighter shared/rust/block_doc/doctest/marker region ```.* $ group
+add-highlighter shared/rust/block_doc/doctest/marker/fence regex ``` 0:meta
+add-highlighter shared/rust/block_doc/doctest/marker/keywords regex [\d\w] 0:meta # already matched above, just ignore comma
+add-highlighter shared/rust/block_doc/doctest/inner default-region group
+add-highlighter shared/rust/block_doc/doctest/inner/hidden regex '^\h*\**\h*#' 0:meta
+add-highlighter shared/rust/block_doc/doctest/inner/comment regex ^\h*\* 0:documentation
+add-highlighter shared/rust/block_doc/doctest/inner/code ref rust
+add-highlighter shared/rust/block_doc/code_rest region ``` ``` fill documentation
+add-highlighter shared/rust/block_doc/doc default-region fill documentation
+add-highlighter shared/rust/block_comment1 region -recurse /\* /\* \*/ fill comment
add-highlighter shared/rust/macro_attributes region -recurse "\[" "#!?\[" "\]" regions
add-highlighter shared/rust/macro_attributes/ default-region fill meta
diff --git a/test/highlight/rust/comment/cmd b/test/highlight/rust/comment/cmd
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/test/highlight/rust/comment/cmd
@@ -0,0 +1 @@
+
diff --git a/test/highlight/rust/comment/in b/test/highlight/rust/comment/in
new file mode 100644
index 00000000..2ce32f0a
--- /dev/null
+++ b/test/highlight/rust/comment/in
@@ -0,0 +1,88 @@
+//! # Hello World
+//!
+//! ```shell
+//! $ cargo install
+//! ```
+//!
+//! ```
+//! # use foo;
+//! foo::bar("Hello world");
+//! ```
+
+//!! ```
+//!! foo::bar("Hello world");
+//!! ```
+
+//// ```
+//// foo::bar("Hello world");
+//// ```
+
+// ```
+// foo::bar("Hello world");
+// ```
+
+// make sure the color does not break
+/// ```
+/// # use foo;
+/// foo::bar("Hello world");
+/// ```
+fn bar(s: &str) {
+ println!("{}", s);
+}
+
+ /// ```shell
+ /// $ cargo install
+ /// ```
+ ///
+ /// ```edition2018,no_run
+ /// # use foo;
+ /// foo::bar("Hello world");
+ /// ```
+ ///
+ /// ```
+ /// # use foo;
+ /// foo::bar("Hello world");
+ /// ```
+
+ //!! ```
+ //!! foo::bar("Hello world");
+ //!! ```
+
+ //// ```
+ //// foo::bar("Hello world");
+ //// ```
+
+ // ```
+ // foo::bar("Hello world");
+ // ```
+
+ /**
+ * ```shell
+ * $ cargo install
+ * ```
+ *
+ * ```edition2018,no_run
+ * # use foo;
+ * foo::bar("Hello world");
+ * ```
+ */
+
+ /**
+ ```
+ # use foo;
+ foo::bar("Hello world");
+ ```
+ */
+
+ /***
+ * ```
+ * foo::bar("Hello world");
+ * ```
+ */
+
+ /*
+ * ```
+ * foo::bar("Hello world");
+ * ```
+ */
+
diff --git a/test/highlight/rust/comment/rc b/test/highlight/rust/comment/rc
new file mode 100644
index 00000000..64064c25
--- /dev/null
+++ b/test/highlight/rust/comment/rc
@@ -0,0 +1,3 @@
+source "%val{runtime}/colors/default.kak"
+source "%val{runtime}/rc/filetype/rust.kak"
+set buffer filetype rust
diff --git a/test/highlight/rust/comment/script b/test/highlight/rust/comment/script
new file mode 100644
index 00000000..560e4d98
--- /dev/null
+++ b/test/highlight/rust/comment/script
@@ -0,0 +1,7 @@
+ui_out '{ "jsonrpc": "2.0", "method": "set_ui_options", "params": [{}] }'
+ui_out '{ "jsonrpc": "2.0", "method": "draw", "params": [[[{ "face": { "fg": "black", "bg": "white", "attributes": ["final_fg","final_bg"] }, "contents": "/" }, { "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "/! # Hello World" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "//!" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "//! ```shell\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "//! $ cargo install\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "//! ```" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "//!" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "//! " }, { "face": { "fg": "magenta", "bg": "default", "attributes": [] }, "contents": "```" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "//!" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": " " }, { "face": { "fg": "magenta", "bg": "default", "attributes": [] }, "contents": "#" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": " " }, { "face": { "fg": "blue", "bg": "default", "attributes": [] }, "contents": "use" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": " foo;\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "//! " }, { "face": { "fg": "green", "bg": "default", "attributes": [] }, "contents": "foo" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "::" }, { "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "bar" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "(" }, { "face": { "fg": "magenta", "bg": "default", "attributes": [] }, "contents": "\"Hello world\"" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": ");\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "//! " }, { "face": { "fg": "magenta", "bg": "default", "attributes": [] }, "contents": "```" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "//!! ```" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "//!! foo::bar(\"Hello world\");" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "//!! ```" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "//// ```" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "//// foo::bar(\"Hello world\");" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "//// ```" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "// ```" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "// foo::bar(\"Hello world\");" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "// ```" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }], [{ "face": { "fg": "cyan", "bg": "default", "attributes": [] }, "contents": "// make sure the color does not break" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "\u000a" }]], { "fg": "default", "bg": "default", "attributes": [] }, { "fg": "blue", "bg": "default", "attributes": [] }] }'
+ui_out '{ "jsonrpc": "2.0", "method": "menu_hide", "params": [] }'
+ui_out '{ "jsonrpc": "2.0", "method": "info_hide", "params": [] }'
+ui_out '{ "jsonrpc": "2.0", "method": "draw_status", "params": [[], [{ "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": "out 1:1 " }, { "face": { "fg": "black", "bg": "yellow", "attributes": [] }, "contents": "" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": " " }, { "face": { "fg": "blue", "bg": "default", "attributes": [] }, "contents": "1 sel" }, { "face": { "fg": "default", "bg": "default", "attributes": [] }, "contents": " - client0@[kak-tests]" }], { "fg": "cyan", "bg": "default", "attributes": [] }] }'
+ui_out '{ "jsonrpc": "2.0", "method": "set_cursor", "params": ["buffer", { "line": 0, "column": 0 }] }'
+ui_out '{ "jsonrpc": "2.0", "method": "refresh", "params": [true] }'