1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
use crate::parsers::language_c_sharp;
use ast_grep_core::language::{Language, TSLanguage};
use std::borrow::Cow;
#[derive(Clone, Copy)]
pub struct CSharp;
impl Language for CSharp {
fn get_ts_language(&self) -> TSLanguage {
language_c_sharp()
}
fn expando_char(&self) -> char {
'µ'
}
fn pre_process_pattern<'q>(&self, query: &'q str) -> Cow<'q, str> {
let mut buf = [0; 4];
let expando = self.expando_char().encode_utf8(&mut buf);
let replaced = query.replace(self.meta_var_char(), expando);
Cow::Owned(replaced)
}
}
#[cfg(test)]
mod test {
use super::*;
fn test_match(query: &str, source: &str) {
use crate::test::test_match_lang;
test_match_lang(query, source, CSharp);
}
#[test]
fn test_c_sharp_pattern() {
let target = "if (table == null) ThrowHelper.ThrowArgumentNullException(nameof(table));";
test_match("int $A = 0;", "int nint = 0;");
test_match("ThrowHelper.ThrowArgumentNullException($)", target);
test_match("ThrowHelper.$", target);
}
fn test_replace(src: &str, pattern: &str, replacer: &str) -> String {
use crate::test::test_replace_lang;
test_replace_lang(src, pattern, replacer, CSharp)
}
#[test]
fn test_c_sharp_replace() {
let ret = test_replace("int @int = 0;", "int $A = 0", "bool @bool = true");
assert_eq!(ret, "bool @bool = true;");
}
}