matches method

bool matches(
  1. TraceSpan span
)

Evaluates whether the given span satisfies this query token.

Implementation

bool matches(TraceSpan span) {
  var match = false;

  if (field == 'dur' || field == 'duration') {
    if (durationUs != null) {
      final spanDur = (span.endUs - span.startUs).toDouble();
      match = switch (operator) {
        '>' => spanDur > durationUs!,
        '<' => spanDur < durationUs!,
        '>=' => spanDur >= durationUs!,
        '<=' => spanDur <= durationUs!,
        _ => spanDur == durationUs!,
      };
    }
  } else {
    final searchTargets = <String>[];

    switch (field) {
      case 'name':
        searchTargets.add(span.name);
      case 'cat':
      case 'category':
        searchTargets.add(span.category);
      case String f:
        if (span.args.containsKey(f)) {
          searchTargets.add(span.args[f]!);
        }
      case null:
        searchTargets.add(span.name);
        searchTargets.add(span.category);
        searchTargets.addAll(span.args.values);
    }

    for (final target in searchTargets) {
      if (regex != null) {
        if (regex!.hasMatch(target)) {
          match = true;
          break;
        }
      } else {
        final targetLower = target.toLowerCase();
        final valLower = value.toLowerCase();

        if (isSmartCase) {
          if (target.contains(value)) {
            match = true;
            break;
          }
        } else {
          if (targetLower.contains(valLower)) {
            match = true;
            break;
          }
        }
      }
    }
  }

  return isExclusion ? !match : match;
}