Skip to content

Add starts with filter options#6062

Merged
brancz merged 4 commits intomainfrom
claude/add-starts-with-filters-01So4CKa83NkKVG2Zmm1nV1d
Nov 28, 2025
Merged

Add starts with filter options#6062
brancz merged 4 commits intomainfrom
claude/add-starts-with-filters-01So4CKa83NkKVG2Zmm1nV1d

Conversation

@brancz
Copy link
Member

@brancz brancz commented Nov 24, 2025

This commit adds two new string filter types to match "contains" and "does not contain":

  • starts_with: matches strings that start with the specified prefix
  • not_starts_with: matches strings that do not start with the specified prefix

Changes:

  • proto: Added starts_with and not_starts_with fields to StringCondition message
  • backend: Updated matchesStringCondition() to handle new filter types using bytes.HasPrefix
  • frontend UI: Added "Starts With" and "Not Starts With" options to filter dropdown
  • frontend types: Updated ProfileFilter interface and createStringCondition() for new match types
  • tests: Added 4 comprehensive tests covering stack and frame filters with both new filter types

The implementation follows the same pattern as existing contains/not_contains filters, with case-insensitive matching and proper null handling.

@brancz brancz requested review from a team as code owners November 24, 2025 12:09
@alwaysmeticulous
Copy link

alwaysmeticulous bot commented Nov 24, 2025

✅ Meticulous spotted 0 visual differences across 315 screens tested: view results.

Meticulous evaluated ~4 hours of user flows against your PR.

Expected differences? Click here. Last updated for commit e29dc18. This comment will update as new commits are pushed.

claude and others added 4 commits November 26, 2025 15:10
This commit adds two new string filter types to match "contains" and "does not contain":
- starts_with: matches strings that start with the specified prefix
- not_starts_with: matches strings that do not start with the specified prefix

Changes:
- proto: Added starts_with and not_starts_with fields to StringCondition message
- backend: Updated matchesStringCondition() to handle new filter types using bytes.HasPrefix
- frontend UI: Added "Starts With" and "Not Starts With" options to filter dropdown
- frontend types: Updated ProfileFilter interface and createStringCondition() for new match types
- tests: Added 4 comprehensive tests covering stack and frame filters with both new filter types

The implementation follows the same pattern as existing contains/not_contains filters,
with case-insensitive matching and proper null handling.
The NotStartsWith filter was being treated as a positive condition, causing
incorrect filter logic. Stack filters with negative conditions need ALL
functions to not match (AND logic), while positive conditions need ANY
function to match (OR logic).

Fixed in 4 functions:
- handleUnsymbolizedFunctionCondition
- matchesFunctionNameInRange
- matchesSystemNameInRange
- matchesFilenameInRange

This fixes the failing TestStackFilterFunctionNameNotStartsWith test.
NewRecordReader now returns (reader, error) instead of just reader.
Updated all 4 test cases to handle the error return value.
@brancz brancz force-pushed the claude/add-starts-with-filters-01So4CKa83NkKVG2Zmm1nV1d branch from 73c3cdf to e29dc18 Compare November 26, 2025 15:11
@brancz brancz merged commit 3d45d5d into main Nov 28, 2025
38 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants