mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 12:21:58 +00:00
feat(linter/jsdoc): Update settings.jsdoc method (#3016)
Add `list_preferred_tag_names()` to enumerate user defined tag names in `tagNamePreferences`.
This commit is contained in:
parent
3831147b6d
commit
395ad76410
1 changed files with 50 additions and 13 deletions
|
|
@ -30,11 +30,10 @@ pub struct JSDocPluginSettings {
|
||||||
|
|
||||||
#[serde(default, rename = "tagNamePreference")]
|
#[serde(default, rename = "tagNamePreference")]
|
||||||
tag_name_preference: FxHashMap<String, TagNamePreference>,
|
tag_name_preference: FxHashMap<String, TagNamePreference>,
|
||||||
//
|
// Not planning to support for now
|
||||||
// Not planning to support?
|
|
||||||
// min_lines: number
|
// min_lines: number
|
||||||
// max_lines: number
|
// max_lines: number
|
||||||
// mode: string
|
// mode: string("typescript" | "closure" | "jsdoc")
|
||||||
//
|
//
|
||||||
// TODO: Need more investigation to understand these usage...
|
// TODO: Need more investigation to understand these usage...
|
||||||
//
|
//
|
||||||
|
|
@ -72,7 +71,7 @@ pub struct JSDocPluginSettings {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl JSDocPluginSettings {
|
impl JSDocPluginSettings {
|
||||||
pub fn is_blocked_tag_name(&self, tag_name: &str) -> Option<String> {
|
pub fn check_blocked_tag_name(&self, tag_name: &str) -> Option<String> {
|
||||||
match self.tag_name_preference.get(tag_name) {
|
match self.tag_name_preference.get(tag_name) {
|
||||||
Some(TagNamePreference::FalseOnly(_)) => Some(format!("Unexpected tag `@{tag_name}`")),
|
Some(TagNamePreference::FalseOnly(_)) => Some(format!("Unexpected tag `@{tag_name}`")),
|
||||||
Some(
|
Some(
|
||||||
|
|
@ -83,15 +82,30 @@ impl JSDocPluginSettings {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn resolve_tag_name(&self, tag_name: &str) -> String {
|
pub fn list_preferred_tag_names(&self) -> Vec<String> {
|
||||||
match self.tag_name_preference.get(tag_name) {
|
self.tag_name_preference
|
||||||
|
.iter()
|
||||||
|
.filter_map(|(_, pref)| match pref {
|
||||||
|
TagNamePreference::TagNameOnly(replacement)
|
||||||
|
| TagNamePreference::ObjectWithMessageAndReplacement { replacement, .. } => {
|
||||||
|
Some(replacement.to_string())
|
||||||
|
}
|
||||||
|
_ => None,
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Resolve original, known tag name to user preferred name
|
||||||
|
/// If not defined, return original name
|
||||||
|
pub fn resolve_tag_name(&self, original_name: &str) -> String {
|
||||||
|
match self.tag_name_preference.get(original_name) {
|
||||||
Some(
|
Some(
|
||||||
TagNamePreference::TagNameOnly(replacement)
|
TagNamePreference::TagNameOnly(replacement)
|
||||||
| TagNamePreference::ObjectWithMessageAndReplacement { replacement, .. },
|
| TagNamePreference::ObjectWithMessageAndReplacement { replacement, .. },
|
||||||
) => replacement.to_string(),
|
) => replacement.to_string(),
|
||||||
_ => {
|
_ => {
|
||||||
// https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/settings.md#default-preferred-aliases
|
// https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/settings.md#default-preferred-aliases
|
||||||
match tag_name {
|
match original_name {
|
||||||
"virtual" => "abstract",
|
"virtual" => "abstract",
|
||||||
"extends" => "augments",
|
"extends" => "augments",
|
||||||
"constructor" => "class",
|
"constructor" => "class",
|
||||||
|
|
@ -108,7 +122,7 @@ impl JSDocPluginSettings {
|
||||||
"return" => "returns",
|
"return" => "returns",
|
||||||
"exception" => "throws",
|
"exception" => "throws",
|
||||||
"yield" => "yields",
|
"yield" => "yields",
|
||||||
_ => tag_name,
|
_ => original_name,
|
||||||
}
|
}
|
||||||
.to_string()
|
.to_string()
|
||||||
}
|
}
|
||||||
|
|
@ -194,9 +208,29 @@ mod test {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn is_blocked_tag_name() {
|
fn list_preferred_tag_names() {
|
||||||
let settings = JSDocPluginSettings::deserialize(&serde_json::json!({})).unwrap();
|
let settings = JSDocPluginSettings::deserialize(&serde_json::json!({})).unwrap();
|
||||||
assert_eq!(settings.is_blocked_tag_name("foo"), None);
|
assert_eq!(settings.list_preferred_tag_names().len(), 0);
|
||||||
|
|
||||||
|
let settings = JSDocPluginSettings::deserialize(&serde_json::json!({
|
||||||
|
"tagNamePreference": {
|
||||||
|
"foo": "bar",
|
||||||
|
"virtual": "overridedefault",
|
||||||
|
"replace": { "message": "noop", "replacement": "noop" },
|
||||||
|
"blocked": { "message": "noop" },
|
||||||
|
"blocked2": false
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
.unwrap();
|
||||||
|
let mut preferred = settings.list_preferred_tag_names();
|
||||||
|
preferred.sort_unstable();
|
||||||
|
assert_eq!(preferred, vec!["bar", "noop", "overridedefault"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn check_blocked_tag_name() {
|
||||||
|
let settings = JSDocPluginSettings::deserialize(&serde_json::json!({})).unwrap();
|
||||||
|
assert_eq!(settings.check_blocked_tag_name("foo"), None);
|
||||||
|
|
||||||
let settings = JSDocPluginSettings::deserialize(&serde_json::json!({
|
let settings = JSDocPluginSettings::deserialize(&serde_json::json!({
|
||||||
"tagNamePreference": {
|
"tagNamePreference": {
|
||||||
|
|
@ -206,8 +240,11 @@ mod test {
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(settings.is_blocked_tag_name("foo"), Some("Unexpected tag `@foo`".to_string()));
|
assert_eq!(
|
||||||
assert_eq!(settings.is_blocked_tag_name("bar"), Some("do not use bar".to_string()));
|
settings.check_blocked_tag_name("foo"),
|
||||||
assert_eq!(settings.is_blocked_tag_name("baz"), Some("baz is noop now".to_string()));
|
Some("Unexpected tag `@foo`".to_string())
|
||||||
|
);
|
||||||
|
assert_eq!(settings.check_blocked_tag_name("bar"), Some("do not use bar".to_string()));
|
||||||
|
assert_eq!(settings.check_blocked_tag_name("baz"), Some("baz is noop now".to_string()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue