code: function doSearchInScope(queryInfo, scope, filter, replaceText, candidateFilesPromise) {
          clearSearch();
          searchModel.scope = scope;
          if (replaceText !== undefined) {
              searchModel.isReplace = true;
              searchModel.replaceText = replaceText;
          }
          candidateFilesPromise = candidateFilesPromise || getCandidateFiles(scope);
          return _doSearch(queryInfo, candidateFilesPromise, filter);
      }
docs: Does a search in the given scope with the given filter. Used when you want to start a search
  programmatically.
  @param {{query: string, caseSensitive: boolean, isRegexp: boolean}} queryInfo Query info object
  @param {?Entry} scope Project file/subfolder to search within; else searches whole project.
  @param {?string} filter A "compiled" filter as returned by FileFilters.compile(), or null for no filter
  @param {?string} replaceText If this is a replacement, the text to replace matches with. This is just
  stored in the model for later use - the replacement is not actually performed right now.
  @param {?$.Promise} candidateFilesPromise If specified, a promise that should resolve with the same set of files that
  getCandidateFiles(scope) would return.
  @return {$.Promise} A promise that's resolved with the search results or rejected when the find competes.