Skip to content

Commit 9e52afd

Browse files
committed
refactor(common): Deleted CaseInsensitiveStr for simplicity
1 parent ee2f083 commit 9e52afd

7 files changed

Lines changed: 18 additions & 178 deletions

File tree

rusty_basic/src/interpreter/context.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
use std::borrow::Borrow;
21
use std::collections::HashMap;
32

4-
use rusty_common::*;
3+
use rusty_common::CaseInsensitiveString;
54
use rusty_linter::{QBNumberCast, SubprogramName};
65
use rusty_parser::{BareName, BuiltInFunction, TypeQualifier};
76
use rusty_variant::{UserDefinedTypeValue, VArray, Variant, bytes_to_i32, i32_to_bytes};
@@ -253,7 +252,7 @@ impl Context {
253252
match self.find_value_in_caller_context(parent_path)? {
254253
Variant::VUserDefined(v_u) => Ok(address_offset_of_property(
255254
v_u.as_ref(),
256-
property_name.borrow(),
255+
property_name,
257256
) + parent_var_ptr),
258257
_ => panic!("Expected user defined type"),
259258
}
@@ -502,7 +501,7 @@ fn address_offset_of_element(v: &VArray, indices: &[i32]) -> Result<usize, Runti
502501
.map_err(RuntimeError::from)
503502
}
504503

505-
fn address_offset_of_property(v: &UserDefinedTypeValue, name: &CaseInsensitiveStr) -> usize {
504+
fn address_offset_of_property(v: &UserDefinedTypeValue, name: &CaseInsensitiveString) -> usize {
506505
v.names()
507506
.take_while(|p| *p != name)
508507
.flat_map(|p| v.get(p))

rusty_common/src/case_insensitive_str.rs

Lines changed: 0 additions & 143 deletions
This file was deleted.

rusty_common/src/case_insensitive_string.rs

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
use std::borrow::Borrow;
21
use std::cmp::Ordering;
32
use std::fmt::Formatter;
43
use std::hash::{Hash, Hasher};
54
use std::ops::{Deref, DerefMut};
65

7-
use crate::CaseInsensitiveStr;
86
use crate::case_insensitive_utils::{cmp_str, hash_str};
97

108
/// A string that is case insensitive when comparing or checking for equality.
@@ -42,17 +40,16 @@ impl CaseInsensitiveString {
4240
/// # Examples
4341
///
4442
/// ```
45-
/// use rusty_common::CaseInsensitiveStr;
4643
/// use rusty_common::CaseInsensitiveString;
47-
/// assert_eq!(CaseInsensitiveString::from("a.b").prefix('.'), Some(CaseInsensitiveStr::new("a")));
44+
/// assert_eq!(CaseInsensitiveString::from("a.b").prefix('.'), Some(CaseInsensitiveString::from("a")));
4845
/// assert_eq!(CaseInsensitiveString::from("ab").prefix('.'), None);
4946
/// ```
50-
pub fn prefix(&self, delimiter: char) -> Option<&CaseInsensitiveStr> {
47+
pub fn prefix(&self, delimiter: char) -> Option<CaseInsensitiveString> {
5148
if self.contains(delimiter) {
5249
let parts: Vec<&str> = self.0.split('.').collect();
5350
debug_assert!(!parts.is_empty());
5451
let first = parts[0];
55-
Some(CaseInsensitiveStr::new(first))
52+
Some(CaseInsensitiveString::from(first))
5653
} else {
5754
None
5855
}
@@ -93,12 +90,6 @@ impl PartialEq for CaseInsensitiveString {
9390

9491
impl Eq for CaseInsensitiveString {}
9592

96-
impl Borrow<CaseInsensitiveStr> for CaseInsensitiveString {
97-
fn borrow(&self) -> &CaseInsensitiveStr {
98-
CaseInsensitiveStr::new(&self.0)
99-
}
100-
}
101-
10293
impl From<String> for CaseInsensitiveString {
10394
fn from(x: String) -> Self {
10495
Self::new(x)

rusty_common/src/case_insensitive_utils.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
use std::cmp::Ordering;
22
use std::hash::{Hash, Hasher};
33

4+
/// Creates a hash for a [str] ignoring case.
45
pub fn hash_str<H: Hasher>(s: &str, state: &mut H) {
56
for byte in s.as_bytes() {
67
byte.to_ascii_uppercase().hash(state);
78
}
89
}
910

11+
/// Compares two [str] ignoring case.
1012
pub fn cmp_str(left: &str, right: &str) -> Ordering {
1113
cmp_bytes(left.as_bytes(), right.as_bytes())
1214
}

rusty_common/src/lib.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
//! The `common` module contains shared functionality (not specific to `rusty-basic`).
2-
mod case_insensitive_str;
32
mod case_insensitive_string;
43
mod case_insensitive_utils;
54
mod position;
65
mod positioned;
76

8-
pub use self::case_insensitive_str::*;
97
pub use self::case_insensitive_string::*;
108
pub use self::case_insensitive_utils::*;
119
pub use self::position::*;

rusty_linter/src/post_linter/dots_linter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ impl NoDotNamesCheck<BareName, LintError> for DotsLinter {
8686
fn ensure_no_dots(&self, x: &BareName) -> Result<(), LintError> {
8787
match x.prefix('.') {
8888
Some(part_before_dot) => {
89-
if self.user_defined_names.contains(part_before_dot) {
89+
if self.user_defined_names.contains(&part_before_dot) {
9090
Err(LintError::DotClash)
9191
} else {
9292
Ok(())

rusty_variant/src/user_defined_type_value.rs

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::borrow::Borrow;
22
use std::collections::HashMap;
33
use std::hash::Hash;
44

5-
use rusty_common::{CaseInsensitiveStr, CaseInsensitiveString};
5+
use rusty_common::CaseInsensitiveString;
66

77
use crate::Variant;
88

@@ -43,8 +43,8 @@ impl UserDefinedTypeValue {
4343
self.name_to_value.get_mut(name)
4444
}
4545

46-
pub fn names(&self) -> impl Iterator<Item = &CaseInsensitiveStr> + '_ {
47-
self.ordered_property_names.iter().map(|s| s.borrow())
46+
pub fn names(&self) -> impl Iterator<Item = &CaseInsensitiveString> {
47+
self.ordered_property_names.iter()
4848
}
4949

5050
pub fn values(&self) -> impl Iterator<Item = &Variant> + '_ {
@@ -56,13 +56,6 @@ impl UserDefinedTypeValue {
5656
mod tests {
5757
use super::*;
5858

59-
#[test]
60-
fn test_get_by_case_insensitive_str() {
61-
let name = CaseInsensitiveStr::new("Card");
62-
let u = UserDefinedTypeValue::new(vec![(name.to_owned(), Variant::VInteger(42))]);
63-
assert_eq!(u.get(name), Some(&Variant::VInteger(42)));
64-
}
65-
6659
#[test]
6760
fn test_get_by_case_insensitive_string() {
6861
let name = CaseInsensitiveString::from("Card");
@@ -72,13 +65,13 @@ mod tests {
7265

7366
#[test]
7467
fn test_get_mut() {
75-
let name = CaseInsensitiveStr::new("Address");
68+
let name = CaseInsensitiveString::from("Address");
7669
let mut u =
7770
UserDefinedTypeValue::new(vec![(name.to_owned(), Variant::VString("home".to_owned()))]);
78-
if let Some(v) = u.get_mut(name) {
71+
if let Some(v) = u.get_mut(&name) {
7972
*v = Variant::VString("work".to_owned());
8073
}
81-
assert_eq!(u.get(name), Some(&Variant::VString("work".to_owned())));
74+
assert_eq!(u.get(&name), Some(&Variant::VString("work".to_owned())));
8275
}
8376

8477
#[test]
@@ -87,12 +80,12 @@ mod tests {
8780
(CaseInsensitiveString::from("Row"), Variant::VInteger(1)),
8881
(CaseInsensitiveString::from("Col"), Variant::VInteger(2)),
8982
]);
90-
let names: Vec<&CaseInsensitiveStr> = u.names().collect();
83+
let names: Vec<&CaseInsensitiveString> = u.names().collect();
9184
assert_eq!(
9285
names,
9386
vec![
94-
CaseInsensitiveStr::new("Row"),
95-
CaseInsensitiveStr::new("Col")
87+
&CaseInsensitiveString::from("Row"),
88+
&CaseInsensitiveString::from("Col")
9689
]
9790
);
9891
}

0 commit comments

Comments
 (0)