Skip to content

Commit 052a5bf

Browse files
committed
optimize for table const render
1 parent a565329 commit 052a5bf

File tree

2 files changed

+59
-23
lines changed

2 files changed

+59
-23
lines changed

crates/code_analysis/src/db_index/member/lua_member.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,27 @@ impl LuaMemberKey {
151151
}
152152
}
153153

154+
impl PartialOrd for LuaMemberKey {
155+
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
156+
Some(self.cmp(other))
157+
}
158+
}
159+
160+
impl Ord for LuaMemberKey {
161+
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
162+
use LuaMemberKey::*;
163+
match (self, other) {
164+
(None, None) => std::cmp::Ordering::Equal,
165+
(None, _) => std::cmp::Ordering::Less,
166+
(_, None) => std::cmp::Ordering::Greater,
167+
(Integer(a), Integer(b)) => a.cmp(b),
168+
(Integer(_), _) => std::cmp::Ordering::Less,
169+
(_, Integer(_)) => std::cmp::Ordering::Greater,
170+
(Name(a), Name(b)) => a.cmp(b),
171+
}
172+
}
173+
}
174+
154175
impl From<LuaIndexKey> for LuaMemberKey {
155176
fn from(key: LuaIndexKey) -> Self {
156177
match key {

crates/code_analysis/src/db_index/type/humanize_type.rs

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
use crate::{
22
DbIndex, GenericTpl, LuaExistFieldType, LuaExtendedType, LuaFunctionType, LuaGenericType,
3-
LuaInstanceType, LuaIntersectionType, LuaMemberKey, LuaMemberOwner, LuaMultiReturn, LuaObjectType,
4-
LuaSignatureId, LuaStringTplType, LuaTupleType, LuaType, LuaTypeDeclId, LuaUnionType,
3+
LuaInstanceType, LuaIntersectionType, LuaMemberKey, LuaMemberOwner, LuaMultiReturn,
4+
LuaObjectType, LuaSignatureId, LuaStringTplType, LuaTupleType, LuaType, LuaTypeDeclId,
5+
LuaUnionType,
56
};
67

78
#[allow(unused)]
@@ -21,7 +22,7 @@ pub fn humanize_type(db: &DbIndex, ty: &LuaType) -> String {
2122
LuaType::TableConst(v) => {
2223
let member_owner = LuaMemberOwner::Element(v.clone());
2324
humanize_table_const_type(db, member_owner)
24-
},
25+
}
2526
LuaType::Global => "global".to_string(),
2627
LuaType::Def(id) => humanize_def_type(db, id),
2728
LuaType::Union(union) => humanize_union_type(db, union),
@@ -248,35 +249,49 @@ fn humanize_generic_type(db: &DbIndex, generic: &LuaGenericType) -> String {
248249
format!("{}<{}>", simple_name, generic_params)
249250
}
250251

251-
fn humanize_table_const_type_extended(db: &DbIndex, member_owned: LuaMemberOwner) -> Option<String> {
252+
fn humanize_table_const_type_extended(
253+
db: &DbIndex,
254+
member_owned: LuaMemberOwner,
255+
) -> Option<String> {
252256
let member_index = db.get_member_index();
253257
let member_map = member_index.get_member_map(member_owned)?;
254258

255-
let members_string = member_map.into_iter().fold(Some("".to_string()), |acc, member| {
256-
let prev_member_string = acc?;
257-
let (member_key, member_id) = member;
258-
let member_value = member_index.get_member(member_id)?;
259+
// sort by key
260+
let mut member_vec = member_map
261+
.into_iter()
262+
.collect::<Vec<_>>();
263+
member_vec.sort_by(|a, b| a.0.cmp(&b.0));
264+
265+
let mut total_length = 0;
266+
let mut members_string = String::new();
267+
for (member_key, member_id) in member_vec {
268+
let member_value = match member_index.get_member(member_id) {
269+
Some(value) => value,
270+
None => continue,
271+
};
259272
let member_value_string = humanize_type(db, member_value.get_decl_type());
260-
273+
261274
let member_string = match member_key {
262275
LuaMemberKey::Name(name) => format!("{} = {}", name, member_value_string),
263276
LuaMemberKey::Integer(i) => format!("[{}] = {}", i, member_value_string),
264-
LuaMemberKey::None => format!("{}", member_value_string)
277+
LuaMemberKey::None => format!("{}", member_value_string),
265278
};
266-
267-
let prev_member_string_len = prev_member_string.chars().count();
268-
269-
// Maximum typename length is 36 symbols.
270-
if prev_member_string_len + member_string.chars().count() <= 32 {
271-
if prev_member_string_len > 0 {
272-
Some(format!("{}, {}", prev_member_string, member_string))
273-
} else {
274-
Some(format!("{}", member_string))
275-
}
276-
} else {
277-
None
279+
280+
let member_string_len = member_string.chars().count();
281+
282+
if total_length + member_string_len > 54 {
283+
members_string.push_str(", ...");
284+
break;
278285
}
279-
})?;
286+
287+
if !members_string.is_empty() {
288+
members_string.push_str(", ");
289+
total_length += 2; // account for ", "
290+
}
291+
292+
members_string.push_str(&member_string);
293+
total_length += member_string_len;
294+
}
280295

281296
Some(format!("{{ {} }}", members_string))
282297
}

0 commit comments

Comments
 (0)