Răsfoiți Sursa

Ensure that invalid search regexp is correctly highlighted (#28724)

GitOrigin-RevId: f122e2ea649d8cbfa984ddad0b7424aa96bd015a
Alf Eaton 10 luni în urmă
părinte
comite
7e74841a97

+ 2 - 11
services/web/frontend/js/features/source-editor/components/codemirror-search-form.tsx

@@ -37,6 +37,7 @@ import { debounce } from 'lodash'
 import { EditorSelection, EditorState } from '@codemirror/state'
 import { sendSearchEvent } from '@/features/event-tracking/search-events'
 import { FullProjectSearchButton } from './full-project-search-button'
+import { isInvalidRegExp } from '../utils/regexp'
 
 const MATCH_COUNT_DEBOUNCE_WAIT = 100 // the amount of ms to wait before counting matches
 const MAX_MATCH_COUNT = 999 // the maximum number of matches to count
@@ -253,8 +254,7 @@ const CodeMirrorSearchForm: FC<React.PropsWithChildren> = () => {
       <div className="ol-cm-search-controls">
         <span
           className={classnames('ol-cm-search-input-group', {
-            'ol-cm-search-input-error':
-              query.regexp && isInvalidRegExp(query.search),
+            'ol-cm-search-input-error': query.regexp && isInvalidRegExp(query),
           })}
         >
           <OLFormControl
@@ -495,15 +495,6 @@ const CodeMirrorSearchForm: FC<React.PropsWithChildren> = () => {
   )
 }
 
-function isInvalidRegExp(source: string) {
-  try {
-    RegExp(source)
-    return false
-  } catch {
-    return true
-  }
-}
-
 export default CodeMirrorSearchForm
 
 const buildPosition = debounce(

+ 9 - 0
services/web/modules/full-project-search/frontend/js/util/regexp.ts → services/web/frontend/js/features/source-editor/utils/regexp.ts

@@ -5,3 +5,12 @@ export const createRegExp = (searchQuery: SearchQuery) => {
 
   return new RegExp(searchQuery.search, flags)
 }
+
+export const isInvalidRegExp = (searchQuery: SearchQuery): boolean => {
+  try {
+    createRegExp(searchQuery)
+    return false
+  } catch {
+    return true
+  }
+}

+ 1 - 1
services/web/modules/full-project-search/frontend/js/components/full-project-search-ui.tsx

@@ -30,7 +30,7 @@ import { FullProjectSearchModifiers } from './full-project-search-modifiers'
 import { isMac } from '@/shared/utils/os'
 import { PanelHeading } from '@/shared/components/panel-heading'
 import { useEditorManagerContext } from '@/features/ide-react/context/editor-manager-context'
-import { createRegExp } from '../util/regexp'
+import { createRegExp } from '@/features/source-editor/utils/regexp'
 import { useEditorOpenDocContext } from '@/features/ide-react/context/editor-open-doc-context'
 import { useFileTreePathContext } from '@/features/file-tree/contexts/file-tree-path'
 import { FullProjectSearchResults } from './full-project-search-results'