Просмотр исходного кода

ref(search): Rename QueryResults -> MutableSearch (#27975)

Evan Purkhiser 3 лет назад
Родитель
Сommit
24c63eb7d0

+ 2 - 2
static/app/components/deployBadge.tsx

@@ -3,7 +3,7 @@ import Tag from 'app/components/tag';
 import {IconOpen} from 'app/icons';
 import {t} from 'app/locale';
 import {Deploy} from 'app/types';
-import {QueryResults} from 'app/utils/tokenizeSearch';
+import {MutableSearch} from 'app/utils/tokenizeSearch';
 
 type Props = {
   deploy: Deploy;
@@ -39,7 +39,7 @@ const DeployBadge = ({deploy, orgSlug, projectId, version, className}: Props) =>
         query: {
           project: projectId ?? null,
           environment: deploy.environment,
-          query: new QueryResults([`release:${version!}`]).formatString(),
+          query: new MutableSearch([`release:${version!}`]).formatString(),
         },
       }}
     >

+ 3 - 3
static/app/components/discover/transactionsList.tsx

@@ -18,7 +18,7 @@ import {Sort} from 'app/utils/discover/fields';
 import BaselineQuery from 'app/utils/performance/baseline/baselineQuery';
 import {TrendsEventsDiscoverQuery} from 'app/utils/performance/trends/trendsDiscoverQuery';
 import {decodeScalar} from 'app/utils/queryString';
-import {tokenizeSearch} from 'app/utils/tokenizeSearch';
+import {MutableSearch} from 'app/utils/tokenizeSearch';
 import {Actions} from 'app/views/eventsV2/table/cellAction';
 import {TableColumn} from 'app/views/eventsV2/table/types';
 import {decodeColumnOrder} from 'app/views/eventsV2/utils';
@@ -149,7 +149,7 @@ class TransactionsList extends React.Component<Props> {
 
     const sortedEventView = eventView.withSorts([selected.sort]);
     if (selected.query) {
-      const query = tokenizeSearch(sortedEventView.query);
+      const query = new MutableSearch(sortedEventView.query);
       selected.query.forEach(item => query.setFilterValues(item[0], [item[1]]));
       sortedEventView.query = query.formatString();
     }
@@ -343,7 +343,7 @@ class TransactionsList extends React.Component<Props> {
     sortedEventView.sorts = [selected.sort];
     sortedEventView.trendType = selected.trendType;
     if (selected.query) {
-      const query = tokenizeSearch(sortedEventView.query);
+      const query = new MutableSearch(sortedEventView.query);
       selected.query.forEach(item => query.setFilterValues(item[0], [item[1]]));
       sortedEventView.query = query.formatString();
     }

+ 2 - 2
static/app/components/quickTrace/utils.tsx

@@ -13,7 +13,7 @@ import {
   TraceError,
 } from 'app/utils/performance/quickTrace/types';
 import {getTraceTimeRangeFromEvent} from 'app/utils/performance/quickTrace/utils';
-import {QueryResults} from 'app/utils/tokenizeSearch';
+import {MutableSearch} from 'app/utils/tokenizeSearch';
 import {getTraceDetailsUrl} from 'app/views/performance/traceDetails/utils';
 import {getTransactionDetailsUrl} from 'app/views/performance/utils';
 
@@ -109,7 +109,7 @@ export function generateMultiTransactionsTarget(
   organization: OrganizationSummary,
   groupType: 'Ancestor' | 'Children' | 'Descendant'
 ): LocationDescriptor {
-  const queryResults = new QueryResults([]);
+  const queryResults = new MutableSearch([]);
   const eventIds = events.map(child => child.event_id);
   for (let i = 0; i < eventIds.length; i++) {
     queryResults.addOp(i === 0 ? '(' : 'OR');

+ 8 - 8
static/app/utils/discover/eventView.tsx

@@ -41,7 +41,7 @@ import {SpanOperationBreakdownFilter} from 'app/views/performance/transactionSum
 import {EventsDisplayFilterName} from 'app/views/performance/transactionSummary/transactionEvents/utils';
 
 import {statsPeriodToDays} from '../dates';
-import {QueryResults, tokenizeSearch} from '../tokenizeSearch';
+import {MutableSearch} from '../tokenizeSearch';
 
 import {getSortField} from './fieldRenderers';
 import {
@@ -274,7 +274,7 @@ class EventView {
   interval: string | undefined;
   expired?: boolean;
   createdBy: User | undefined;
-  additionalConditions: QueryResults; // This allows views to always add additional conditins to the query to get specific data. It should not show up in the UI unless explicitly called.
+  additionalConditions: MutableSearch; // This allows views to always add additional conditins to the query to get specific data. It should not show up in the UI unless explicitly called.
 
   constructor(props: {
     id: string | undefined;
@@ -293,7 +293,7 @@ class EventView {
     interval?: string;
     expired?: boolean;
     createdBy: User | undefined;
-    additionalConditions: QueryResults;
+    additionalConditions: MutableSearch;
   }) {
     const fields: Field[] = Array.isArray(props.fields) ? props.fields : [];
     let sorts: Sort[] = Array.isArray(props.sorts) ? props.sorts : [];
@@ -340,7 +340,7 @@ class EventView {
     this.expired = props.expired;
     this.additionalConditions = props.additionalConditions
       ? props.additionalConditions.copy()
-      : new QueryResults([]);
+      : new MutableSearch([]);
   }
 
   static fromLocation(location: Location): EventView {
@@ -362,7 +362,7 @@ class EventView {
       display: decodeScalar(location.query.display),
       interval: decodeScalar(location.query.interval),
       createdBy: undefined,
-      additionalConditions: new QueryResults([]),
+      additionalConditions: new MutableSearch([]),
     });
   }
 
@@ -434,7 +434,7 @@ class EventView {
       display: saved.display,
       createdBy: saved.createdBy,
       expired: saved.expired,
-      additionalConditions: new QueryResults([]),
+      additionalConditions: new MutableSearch([]),
     });
   }
 
@@ -468,7 +468,7 @@ class EventView {
         interval: decodeScalar(location.query.interval),
         createdBy: saved.createdBy,
         expired: saved.expired,
-        additionalConditions: new QueryResults([]),
+        additionalConditions: new MutableSearch([]),
         // Always read team from location since they can be set by other parts
         // of the UI
         team: teams,
@@ -1316,7 +1316,7 @@ class EventView {
     if (this.additionalConditions.isEmpty()) {
       return query;
     }
-    const conditions = tokenizeSearch(query);
+    const conditions = new MutableSearch(query);
     Object.entries(this.additionalConditions.filters).forEach(([tag, tagValues]) => {
       const existingTagValues = conditions.getFilterValues(tag);
       const newTagValues = tagValues.filter(

+ 15 - 13
static/app/utils/tokenizeSearch.tsx

@@ -33,10 +33,22 @@ function isParen(token: Token, character: '(' | ')') {
 // searchSyntax/parser. We should absolutely replace the internals of this API
 // with `parseSearch`.
 
-export class QueryResults {
+export class MutableSearch {
   tokens: Token[];
 
-  constructor(strTokens: string[]) {
+  /**
+   * Creates a MutableSearch from a string query
+   */
+  constructor(query: string);
+  /**
+   * Creates a mutable search query from a list of query parts
+   */
+  constructor(queries: string[]);
+  constructor(tokensOrQuery: string[] | string) {
+    const strTokens = Array.isArray(tokensOrQuery)
+      ? tokensOrQuery
+      : splitSearchIntoTokens(tokensOrQuery);
+
     this.tokens = [];
 
     for (let token of strTokens) {
@@ -286,7 +298,7 @@ export class QueryResults {
   }
 
   copy() {
-    const q = new QueryResults([]);
+    const q = new MutableSearch([]);
     q.tokens = [...this.tokens];
     return q;
   }
@@ -296,16 +308,6 @@ export class QueryResults {
   }
 }
 
-/**
- * Tokenize a search into a QueryResult
- *
- * Should stay in sync with src.sentry.search.utils:tokenize_query
- */
-export function tokenizeSearch(query: string) {
-  const tokens = splitSearchIntoTokens(query);
-  return new QueryResults(tokens);
-}
-
 /**
  * Splits search strings into tokens for parsing by tokenizeSearch.
  *

+ 3 - 3
static/app/views/alerts/incidentRules/incidentRulePresets.tsx

@@ -2,7 +2,7 @@ import Link from 'app/components/links/link';
 import {t} from 'app/locale';
 import {Project} from 'app/types';
 import {DisplayModes} from 'app/utils/discover/types';
-import {tokenizeSearch} from 'app/utils/tokenizeSearch';
+import {MutableSearch} from 'app/utils/tokenizeSearch';
 import {Dataset, IncidentRule} from 'app/views/alerts/incidentRules/types';
 import {getIncidentRuleDiscoverUrl} from 'app/views/alerts/utils/getIncidentRuleDiscoverUrl';
 import {transactionSummaryRouteWithQuery} from 'app/views/performance/transactionSummary/utils';
@@ -149,7 +149,7 @@ function makeGenericTransactionCta(opts: {
     return {to: '', buttonText: t('Alert rule details')};
   }
 
-  const query = tokenizeSearch(rule.query ?? '');
+  const query = new MutableSearch(rule.query ?? '');
   const transaction = query
     .getFilterValues('transaction')
     ?.find(filter => !filter.includes('*'));
@@ -210,7 +210,7 @@ function makeFailureRateCta({orgSlug, rule, projects, start, end}: PresetCtaOpts
     return {to: '', buttonText: t('Alert rule details')};
   }
 
-  const query = tokenizeSearch(rule.query ?? '');
+  const query = new MutableSearch(rule.query ?? '');
   const transaction = query
     .getFilterValues('transaction')
     ?.find(filter => !filter.includes('*'));

+ 3 - 3
static/app/views/alerts/incidentRules/presets.tsx

@@ -2,7 +2,7 @@ import Link from 'app/components/links/link';
 import {t} from 'app/locale';
 import {Project} from 'app/types';
 import {DisplayModes} from 'app/utils/discover/types';
-import {tokenizeSearch} from 'app/utils/tokenizeSearch';
+import {MutableSearch} from 'app/utils/tokenizeSearch';
 import {Incident, IncidentStats} from 'app/views/alerts/types';
 import {getStartEndFromStats} from 'app/views/alerts/utils';
 import {getIncidentDiscoverUrl} from 'app/views/alerts/utils/getIncidentDiscoverUrl';
@@ -150,7 +150,7 @@ function makeGenericTransactionCta(opts: {
     return {to: '', buttonText: t('Incident details')};
   }
 
-  const query = tokenizeSearch(incident.discoverQuery ?? '');
+  const query = new MutableSearch(incident.discoverQuery ?? '');
   const transaction = query
     .getFilterValues('transaction')
     ?.find(filter => !filter.includes('*'));
@@ -212,7 +212,7 @@ function makeFailureRateCta({orgSlug, incident, projects, stats}: PresetCtaOpts)
     return {to: '', buttonText: t('Incident details')};
   }
 
-  const query = tokenizeSearch(incident.discoverQuery ?? '');
+  const query = new MutableSearch(incident.discoverQuery ?? '');
   const transaction = query
     .getFilterValues('transaction')
     ?.find(filter => !filter.includes('*'));

+ 2 - 2
static/app/views/dashboardsV2/widget/metricWidget/statsRequest.tsx

@@ -10,7 +10,7 @@ import {URL_PARAM} from 'app/constants/globalSelectionHeader';
 import {t} from 'app/locale';
 import {GlobalSelection, Organization, Project, SessionApiResponse} from 'app/types';
 import {Series} from 'app/types/echarts';
-import {QueryResults} from 'app/utils/tokenizeSearch';
+import {MutableSearch} from 'app/utils/tokenizeSearch';
 import {getInterval} from 'app/views/releases/detail/overview/chart/utils';
 import {roundDuration} from 'app/views/releases/utils';
 
@@ -109,7 +109,7 @@ function StatsRequest({
           .filter(tag => !!tag);
 
         if (!!tagsWithDoubleQuotes.length) {
-          query.query = new QueryResults(tagsWithDoubleQuotes).formatString();
+          query.query = new MutableSearch(tagsWithDoubleQuotes).formatString();
         }
       }
 

+ 2 - 2
static/app/views/eventsV2/table/cellAction.tsx

@@ -16,7 +16,7 @@ import {
   isRelativeSpanOperationBreakdownField,
 } from 'app/utils/discover/fields';
 import {getDuration} from 'app/utils/formatters';
-import {QueryResults} from 'app/utils/tokenizeSearch';
+import {MutableSearch} from 'app/utils/tokenizeSearch';
 
 import {TableColumn} from './types';
 
@@ -32,7 +32,7 @@ export enum Actions {
 }
 
 export function updateQuery(
-  results: QueryResults,
+  results: MutableSearch,
   action: Actions,
   column: TableColumn<keyof TableDataRow>,
   value: React.ReactText | string[]

+ 2 - 2
static/app/views/eventsV2/table/tableView.tsx

@@ -33,7 +33,7 @@ import {
 } from 'app/utils/discover/fields';
 import {DisplayModes, TOP_N} from 'app/utils/discover/types';
 import {eventDetailsRouteWithEventView, generateEventSlug} from 'app/utils/discover/urls';
-import {tokenizeSearch} from 'app/utils/tokenizeSearch';
+import {MutableSearch} from 'app/utils/tokenizeSearch';
 import withProjects from 'app/utils/withProjects';
 import {getTraceDetailsUrl} from 'app/views/performance/traceDetails/utils';
 import {transactionSummaryRouteWithQuery} from 'app/views/performance/transactionSummary/utils';
@@ -352,7 +352,7 @@ class TableView extends React.Component<TableViewProps> {
     return (action: Actions, value: React.ReactText) => {
       const {eventView, organization, projects} = this.props;
 
-      const query = tokenizeSearch(eventView.query);
+      const query = new MutableSearch(eventView.query);
 
       let nextView = eventView.clone();
 

Некоторые файлы не были показаны из-за большого количества измененных файлов