Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
4953ddd
update: add 3 more border styles
dg-ac Jan 24, 2026
27367b1
update: use a popper instead of a popover
dg-ac Jan 25, 2026
009b06e
update: add a timeout in nested menu
dg-ac Jan 25, 2026
6b1e9b7
chore: remove duplications in worksheetcanvas
dg-ac Jan 30, 2026
ebb0446
update: add 3 more styles
dg-ac Jan 30, 2026
88410df
fix: comments
dg-ac Feb 2, 2026
163fa3b
fix: treat leading comma as text
rezat-c Feb 4, 2026
8acef66
fix: add support for booleans and upper bound for df (#734 and #735)
elsaminsut Feb 3, 2026
af0a180
update: add unit test for bug fix
elsaminsut Feb 3, 2026
e22549c
fix: add max deg of freedom as constant
elsaminsut Feb 3, 2026
38c4787
update: adds locale testing for database functions
elsaminsut Jan 26, 2026
d6ea5e6
fix: changes to locale name, use correct formula delimitter for de
elsaminsut Jan 26, 2026
d4015cd
FIX: Cut and paste on partially selected range
nhatcher Feb 7, 2026
21631e0
FIX: Adds missing test
nhatcher Feb 7, 2026
bb2c62a
merge xmatch #48
BrianHung Jul 30, 2025
6663ddb
merge address #46
BrianHung Jul 30, 2025
810b58c
merge row, rows, column, columns #42
BrianHung Jul 30, 2025
e41ec78
merge isna #30
BrianHung Jul 30, 2025
3c31ccf
merge proper, replace #38
BrianHung Jul 30, 2025
8dd2779
merge mid, lower, left, right #27
BrianHung Jul 30, 2025
eee3f97
refactor
BrianHung Aug 1, 2025
29f99e5
Add XMATCH function and clean up PR #53
BrianHung Jan 30, 2026
16a445f
Force GitHub to recalculate diff
BrianHung Feb 1, 2026
941490b
Fix XMATCH match mode handling and text coercion.
BrianHung Feb 9, 2026
7c8d7da
Fix PR 53: add util helpers, get_string for REPLACE, Xmatch dispatch,…
BrianHung Feb 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions base/src/expressions/parser/static_analysis.rs
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,15 @@ fn args_signature_xlookup(arg_count: usize) -> Vec<Signature> {
result
}

fn args_signature_xmatch(arg_count: usize) -> Vec<Signature> {
if !(2..=4).contains(&arg_count) {
return vec![Signature::Error; arg_count];
}
let mut result = vec![Signature::Scalar; arg_count];
result[1] = Signature::Vector; // lookup_array should be Vector
result
}

fn args_signature_textafter(arg_count: usize) -> Vec<Signature> {
if !(2..=6).contains(&arg_count) {
vec![Signature::Scalar; arg_count]
Expand Down Expand Up @@ -682,13 +691,15 @@ fn get_function_args_signature(kind: &Function, arg_count: usize) -> Vec<Signatu
Function::Hlookup => args_signature_hlookup(arg_count),
Function::Index => args_signature_index(arg_count),
Function::Indirect => args_signature_scalars(arg_count, 1, 0),
Function::Address => args_signature_scalars(arg_count, 2, 3),
Function::Lookup => args_signature_lookup(arg_count),
Function::Match => args_signature_match(arg_count),
Function::Offset => args_signature_offset(arg_count),
Function::Row => args_signature_row(arg_count),
Function::Rows => args_signature_one_vector(arg_count),
Function::Vlookup => args_signature_hlookup(arg_count),
Function::Xlookup => args_signature_xlookup(arg_count),
Function::Xmatch => args_signature_xmatch(arg_count),
Function::Concat => vec![Signature::Vector; arg_count],
Function::Concatenate => vec![Signature::Scalar; arg_count],
Function::Exact => args_signature_scalars(arg_count, 2, 0),
Expand All @@ -697,6 +708,8 @@ fn get_function_args_signature(kind: &Function, arg_count: usize) -> Vec<Signatu
Function::Len => args_signature_scalars(arg_count, 1, 0),
Function::Lower => args_signature_scalars(arg_count, 1, 0),
Function::Mid => args_signature_scalars(arg_count, 3, 0),
Function::Proper => args_signature_scalars(arg_count, 1, 0),
Function::Replace => args_signature_scalars(arg_count, 4, 0),
Function::Rept => args_signature_scalars(arg_count, 2, 0),
Function::Right => args_signature_scalars(arg_count, 2, 1),
Function::Search => args_signature_scalars(arg_count, 2, 1),
Expand Down Expand Up @@ -1076,13 +1089,15 @@ fn static_analysis_on_function(kind: &Function, args: &[Node]) -> StaticResult {
Function::Hlookup => not_implemented(args),
Function::Index => static_analysis_index(args),
Function::Indirect => static_analysis_indirect(args),
Function::Address => scalar_arguments(args),
Function::Lookup => not_implemented(args),
Function::Match => not_implemented(args),
Function::Offset => static_analysis_offset(args),
Function::Row => StaticResult::Scalar,
Function::Rows => not_implemented(args),
Function::Vlookup => not_implemented(args),
Function::Xlookup => not_implemented(args),
Function::Xmatch => scalar_arguments(args),
Function::Concat => not_implemented(args),
Function::Concatenate => not_implemented(args),
Function::Exact => not_implemented(args),
Expand All @@ -1091,6 +1106,8 @@ fn static_analysis_on_function(kind: &Function, args: &[Node]) -> StaticResult {
Function::Len => not_implemented(args),
Function::Lower => not_implemented(args),
Function::Mid => not_implemented(args),
Function::Proper => scalar_arguments(args),
Function::Replace => scalar_arguments(args),
Function::Rept => not_implemented(args),
Function::Right => not_implemented(args),
Function::Search => not_implemented(args),
Expand Down
5 changes: 5 additions & 0 deletions base/src/formatter/format.rs
Original file line number Diff line number Diff line change
Expand Up @@ -928,6 +928,11 @@ fn parse_number(
} else {
1.0
};

if bytes[position] == group_separator {
return Err("Cannot parse number".to_string());
}

// numbers before the decimal point
while position < len {
let x = bytes[position];
Expand Down
Loading