Skip to content

Commit

Permalink
zowe#2432 option 1
Browse files Browse the repository at this point in the history
  • Loading branch information
JWaters02 committed Feb 18, 2025
1 parent 4ac89bb commit 70908bc
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 9 deletions.
29 changes: 22 additions & 7 deletions packages/zosfiles/src/methods/search/Search.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,12 @@ export class Search {

public static async dataSets(session: AbstractSession, searchOptions: ISearchOptions): Promise<ISearchResponse> {
ImperativeExpect.toBeDefinedAndNonBlank(searchOptions.pattern, "pattern");
ImperativeExpect.toBeDefinedAndNonBlank(searchOptions.searchString, "searchString");
if (!searchOptions.searchString && !searchOptions.searchRegex) {
throw new ImperativeError({ msg: "Either searchString or searchRegex must be provided." });
}

const failedDatasets: string[] = [];
const origSearchQuery = searchOptions.searchString;
const origSearchQuery = searchOptions.searchString || searchOptions.searchRegex;
let timer: NodeJS.Timeout;
this.timerExpired = false;

Expand Down Expand Up @@ -203,7 +205,7 @@ export class Search {

const lineLen = maxLine.toString().length;
const colLen = maxCol.toString().length;
const searchLen = searchOptions.searchString.length;
const searchLen = searchOptions.searchString?.length || searchOptions.searchRegex?.length || 0;

for (const {line, column, contents} of entry.matchList) {
// eslint-disable-next-line no-control-regex
Expand Down Expand Up @@ -263,11 +265,17 @@ export class Search {

// Handle case sensitivity
if (searchOptions.caseSensitive == undefined || searchOptions.caseSensitive === false) {
searchOptions.searchString = searchOptions.searchString.toLowerCase();
searchOptions.searchString = searchOptions.searchString?.toLowerCase();
searchOptions.searchRegex = searchOptions.searchRegex?.toLowerCase();
}

// Set up the query
let queryParams = "?search=" + encodeURIComponent(searchOptions.searchString) + "&maxreturnsize=1";
let queryParams = "?maxreturnsize=1";
if (searchOptions.searchString) {
queryParams += "&search=" + encodeURIComponent(searchOptions.searchString);
} else if (searchOptions.searchRegex) {
queryParams += "&research=" + encodeURIComponent(searchOptions.searchRegex);
}
if (searchOptions.caseSensitive === true) { queryParams += "&insensitive=false"; }
let dsn = searchItem.dsn;
if (searchItem.member) { dsn += "(" + searchItem.member + ")"; }
Expand Down Expand Up @@ -354,7 +362,8 @@ export class Search {

// Handle case sensitivity
if (searchOptions.caseSensitive == undefined || searchOptions.caseSensitive === false) {
searchOptions.searchString = searchOptions.searchString.toLowerCase();
searchOptions.searchString = searchOptions.searchString?.toLowerCase();
searchOptions.searchRegex = searchOptions.searchRegex?.toLowerCase();
}

// Perform the search
Expand All @@ -367,7 +376,7 @@ export class Search {
searchLine = line.toLowerCase();
}

if (searchLine.includes(searchOptions.searchString)) {
if (searchOptions.searchString && searchLine.includes(searchOptions.searchString)) {
let lastCol = 0;
let lastColIndexPlusLen = 0;
while (lastCol != -1) {
Expand All @@ -379,6 +388,12 @@ export class Search {
indicies.push({line: lineNum + 1, column: column + 1, contents: line});
}
}
} else if (searchOptions.searchRegex) {
const regex = new RegExp(searchOptions.searchRegex, searchOptions.caseSensitive ? "" : "i");
const match = regex.exec(searchLine);
if (match) {
indicies.push({line: lineNum + 1, column: match.index + 1, contents: line});
}
}
lineNum++;
}
Expand Down
7 changes: 5 additions & 2 deletions packages/zosfiles/src/methods/search/doc/ISearchOptions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@ export interface ISearchOptions {
pattern: string;

/* The string to search for in the data set / members */
searchString: string;
searchString?: string;

/* The regular expression to search for in the data set / members */
searchRegex?: string;

/* Options for data set get requests */
getOptions?: IGetOptions;
Expand Down Expand Up @@ -50,4 +53,4 @@ export interface ISearchOptions {
/* If abortSearch returns true, then the search should terminate immediately with the current available results. */
/* This prevents searches from continuing to run in the background in the case that a user wishes to cancel a search (i.e. in VS Code) */
abortSearch?: () => boolean;
}
}

0 comments on commit 70908bc

Please sign in to comment.