From 21be04cba1b400b0f046a21cf6e74ec7c6024f47 Mon Sep 17 00:00:00 2001 From: Embers-of-the-Fire Date: Wed, 24 May 2023 22:38:26 +0800 Subject: [PATCH] Add Nuget Config, Bazel and EdgeQL Support, Fix Output Formatter (#999) * add nuget configuration support * fix test file * add bazel language * fix output format * add languages to readme * fix serialize * add edgeql * edit readme * add test file * fix edgedb --- CONTRIBUTING.md | 7 ++++--- README.md | 6 ++++++ languages.json | 25 +++++++++++++++++++++++++ src/language/language_type.rs | 9 +++++++++ src/language/language_type.tera.rs | 6 +++--- tests/data/NuGet.Config | 24 ++++++++++++++++++++++++ tests/data/bazel.bzl | 18 ++++++++++++++++++ tests/data/edgeql.edgeql | 28 ++++++++++++++++++++++++++++ tests/data/esdl.esdl | 20 ++++++++++++++++++++ 9 files changed, 137 insertions(+), 6 deletions(-) create mode 100644 tests/data/NuGet.Config create mode 100644 tests/data/bazel.bzl create mode 100644 tests/data/edgeql.edgeql create mode 100644 tests/data/esdl.esdl diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 275e175b3..0084d42be 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -205,12 +205,13 @@ fn foo() { Please include the error message and a minimum working example including the file or file structure. -``` +```` This file crashes the program: -\`\`\` -\`\`\` ``` + +``` +```` [Rust's enum style]: https://github.com/rust-lang/rfcs/blob/master/text/0430-finalizing-naming-conventions.md#general-naming-conventions diff --git a/README.md b/README.md index 208aaa402..2ffc5fb2c 100644 --- a/README.md +++ b/README.md @@ -322,6 +322,9 @@ Automake AWK Bash Batch +Bazel +Bean +Bitbake BrightScript C Cabal @@ -355,6 +358,8 @@ Dockerfile DotNetResource DreamMaker Dust +Ebuild +EdgeDB Edn Elisp Elixir @@ -430,6 +435,7 @@ Mustache Nim Nix NotQuitePerl +NuGetConfig Nushell ObjectiveC ObjectiveCpp diff --git a/languages.json b/languages.json index 86d4365d6..1a9311525 100644 --- a/languages.json +++ b/languages.json @@ -134,6 +134,13 @@ "line_comment": ["REM", "::"], "extensions": ["bat", "btm", "cmd"] }, + "Bazel": { + "line_comment": ["#"], + "doc_quotes": [["\\\"\\\"\\\"", "\\\"\\\"\\\""], ["'''", "'''"]], + "quotes": [["\\\"", "\\\""], ["'", "'"]], + "extensions": ["bzl", "bazel"], + "filenames": ["build", "workspace"] + }, "Bean": { "line_comment": [";"], "quotes": [["\\\"", "\\\""]], @@ -368,6 +375,18 @@ "quotes": [["\\\"", "\\\""], ["'", "'"]], "extensions": ["ebuild", "eclass"] }, + "EdgeQL": { + "name": "EdgeQL", + "line_comment": ["#"], + "quotes": [["'", "'"], ["\\\"", "\\\""], ["$", "$"]], + "extensions": ["edgeql"] + }, + "ESDL": { + "name": "EdgeDB Schema Definition", + "line_comment": ["#"], + "quotes": [["'", "'"], ["\\\"", "\\\""]], + "extensions": ["esdl"] + }, "Edn": { "line_comment": [";"], "extensions": ["edn"] @@ -953,6 +972,12 @@ "quotes": [["\\\"", "\\\""], ["'", "'"]], "extensions": ["nqp"] }, + "NuGetConfig": { + "name": "NuGet Config", + "multi_line_comments": [[""]], + "quotes": [["\\\"", "\\\""], ["'", "'"]], + "filenames": ["nuget.config", "packages.config", "nugetdefaults.config"] + }, "Nushell": { "line_comment": ["#"], "quotes": [ diff --git a/src/language/language_type.rs b/src/language/language_type.rs index fb06ba889..a42012c13 100644 --- a/src/language/language_type.rs +++ b/src/language/language_type.rs @@ -17,11 +17,20 @@ use crate::{ use encoding_rs_io::DecodeReaderBytesBuilder; use grep_searcher::{LineIter, LineStep}; use rayon::prelude::*; +use serde::Serialize; use self::LanguageType::*; include!(concat!(env!("OUT_DIR"), "/language_type.rs")); +impl Serialize for LanguageType { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer { + serializer.serialize_str(self.name()) + } +} + impl LanguageType { /// Parses a given [`Path`] using the [`LanguageType`]. Returning [`Report`] /// on success and giving back ownership of [`PathBuf`] on error. diff --git a/src/language/language_type.tera.rs b/src/language/language_type.tera.rs index f74c98087..c0774fabf 100644 --- a/src/language/language_type.tera.rs +++ b/src/language/language_type.tera.rs @@ -4,13 +4,13 @@ use arbitrary::Arbitrary; /// information about the language, such as multi line comments, single line /// comments, string literal syntax, whether a given language allows nesting /// comments. -#[derive(Deserialize, Serialize)] +#[derive(Deserialize)] #[derive(Arbitrary, Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] #[non_exhaustive] #[allow(clippy::upper_case_acronyms)] pub enum LanguageType { - {% for key, _ in languages -%} - #[allow(missing_docs)] {{key}}, + {% for key, value in languages -%} + #[allow(missing_docs)] {% if value.name is defined %} #[serde(alias = "{{value.name}}")] {% else %} #[serde(alias = "{{key}}")] {% endif %} {{key}}, {% endfor %} } diff --git a/tests/data/NuGet.Config b/tests/data/NuGet.Config new file mode 100644 index 000000000..2ae7eace6 --- /dev/null +++ b/tests/data/NuGet.Config @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/bazel.bzl b/tests/data/bazel.bzl new file mode 100644 index 000000000..f2f999077 --- /dev/null +++ b/tests/data/bazel.bzl @@ -0,0 +1,18 @@ +# 18 lines 13 code 3 comments 2 blanks + +# build hello-greet +cc_library( + name = "hello-greet", + srcs = ["hello-greet.cc"], + hdrs = ["hello-greet.h"], +) + +# build hello-world +cc_binary( + name = "hello-world", + srcs = ["hello-world.cc"], + deps = [ + ":hello-greet", + "//lib:hello-time", + ], +) \ No newline at end of file diff --git a/tests/data/edgeql.edgeql b/tests/data/edgeql.edgeql new file mode 100644 index 000000000..7c6167c65 --- /dev/null +++ b/tests/data/edgeql.edgeql @@ -0,0 +1,28 @@ +# 28 lines 21 code 3 comments 4 blanks + +select User { + name, + friends: { + name + }, + has_i := .friends.name ilike '%i%', + has_o := .friends.name ilike '%o%', +} filter .has_i or .has_o; + +select {} ?? User {name}; + +# update the user with the name 'Alice Smith' +with module example +update User +filter .name = 'Alice Smith' +set { + name := 'Alice J. Smith' +}; + +# update all users whose name is 'Bob' +with module example +update User +filter .name like 'Bob%' +set { + name := User.name ++ '*' +}; diff --git a/tests/data/esdl.esdl b/tests/data/esdl.esdl new file mode 100644 index 000000000..f5ac632e4 --- /dev/null +++ b/tests/data/esdl.esdl @@ -0,0 +1,20 @@ +# 20 lines 13 code 4 comments 3 blanks + +# no module block +type default::Movie { + required property title -> str; + # the year of release + property year -> int64; + required link director -> default::Person; + required multi link actors -> default::Person; +} + +type default::Person { + required property first_name -> str; + required property last_name -> str; +} + +abstract link friends_base { + # declare a specific title for the link + annotation title := 'Close contacts'; +}