DCausse has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/323804

Change subject: Move the Escaper into the SeachContext
......................................................................

Move the Escaper into the SeachContext

Just to make Keyword features construction a bit more homogeneous.

Change-Id: Id37932c8da41a3ae3df896c013a519db8e6e59d9
---
M includes/Query/FullTextQueryStringQueryBuilder.php
M includes/Query/FullTextSimpleMatchQueryBuilder.php
M includes/Query/InTitleFeature.php
M includes/Query/SimpleInSourceFeature.php
M includes/Search/SearchContext.php
M includes/Searcher.php
M tests/unit/Query/FullTextQueryStringQueryBuilder.php
M tests/unit/Query/InTitleFeatureTest.php
8 files changed, 40 insertions(+), 60 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/CirrusSearch 
refs/changes/04/323804/1

diff --git a/includes/Query/FullTextQueryStringQueryBuilder.php 
b/includes/Query/FullTextQueryStringQueryBuilder.php
index 9b1416b..b2cd340 100644
--- a/includes/Query/FullTextQueryStringQueryBuilder.php
+++ b/includes/Query/FullTextQueryStringQueryBuilder.php
@@ -5,7 +5,6 @@
 use CirrusSearch\OtherIndexes;
 use CirrusSearch\SearchConfig;
 use CirrusSearch\Searcher;
-use CirrusSearch\Search\Escaper;
 use CirrusSearch\Search\SearchContext;
 use MediaWiki\Logger\LoggerFactory;
 
@@ -20,11 +19,6 @@
        protected $config;
 
        /**
-        * @var Escaper
-        */
-       private $escaper;
-
-       /**
         * @var KeywordFeature[]
         */
        private $features;
@@ -36,13 +30,11 @@
 
        /**
         * @param SearchConfig $config
-        * @param Escaper $escaper
         * @param KeywordFeature[] $features
         * @param array[] $settings currently ignored
         */
-       public function __construct( SearchConfig $config, Escaper $escaper, 
array $features, array $settings = [] ) {
+       public function __construct( SearchConfig $config, array $features, 
array $settings = [] ) {
                $this->config = $config;
-               $this->escaper = $escaper;
                $this->features = $features;
        }
 
@@ -67,7 +59,7 @@
                        return;
                }
 
-               $term = $this->escaper->escapeQuotes( $term );
+               $term = $searchContext->escaper()->escapeQuotes( $term );
                $term = trim( $term );
 
                // Match quoted phrases including those containing escaped 
quotes.
@@ -83,7 +75,7 @@
                        "/$matchQuotesRegex/",
                        function ( $matches ) use ( $searchContext, $slop ) {
                                $negate = $matches[ 'negate' ][ 0 ] ? 'NOT ' : 
'';
-                               $main = $this->escaper->fixupQueryStringPart( 
$matches[ 'main' ][ 0 ] );
+                               $main = 
$searchContext->escaper()->fixupQueryStringPart( $matches[ 'main' ][ 0 ] );
 
                                if ( !$negate && !isset( $matches[ 'fuzzy' ] ) 
&& !isset( $matches[ 'slop' ] ) &&
                                                 preg_match( 
'/^"([^"*]+)[*]"/', $main, $matches ) ) {
@@ -119,7 +111,7 @@
                // in prefix queries.
                $query = self::replaceAllPartsOfQuery( $query, 
'/\w+\*(?:\w*\*?)*/u',
                        function ( $matches ) use ( $searchContext ) {
-                               $term = $this->escaper->fixupQueryStringPart( 
$matches[ 0 ][ 0 ] );
+                               $term = 
$searchContext->escaper()->fixupQueryStringPart( $matches[ 0 ][ 0 ] );
                                return [
                                        'escaped' => 
self::switchSearchToExactForWildcards( $searchContext, $term ),
                                        'nonAll' => 
self::switchSearchToExactForWildcards( $searchContext, $term )
@@ -140,7 +132,7 @@
                                continue;
                        }
                        if ( isset( $queryPart[ 'raw' ] ) ) {
-                               $fixed = $this->escaper->fixupQueryStringPart( 
$queryPart[ 'raw' ] );
+                               $fixed = 
$searchContext->escaper()->fixupQueryStringPart( $queryPart[ 'raw' ] );
                                $escapedQuery[] = $fixed;
                                $nonAllQuery[] = $fixed;
                                $nearMatchQuery[] = $queryPart[ 'raw' ];
@@ -154,7 +146,7 @@
 
                // Actual text query
                list( $this->queryStringQueryString, $fuzzyQuery ) =
-                       $this->escaper->fixupWholeQueryString( implode( ' ', 
$escapedQuery ) );
+                       $searchContext->escaper()->fixupWholeQueryString( 
implode( ' ', $escapedQuery ) );
                $searchContext->setFuzzyQuery( $fuzzyQuery );
 
                if ( $this->queryStringQueryString === '' ) {
@@ -205,7 +197,7 @@
                        $nonAllFields = array_merge(
                                self::buildFullTextSearchFields( 
$searchContext, 1, '.plain', false ),
                                self::buildFullTextSearchFields( 
$searchContext, $this->config->get( 'CirrusSearchStemmedWeight' ), '', false ) 
);
-                       list( $nonAllQueryString, /*_*/ ) = 
$this->escaper->fixupWholeQueryString( implode( ' ', $nonAllQuery ) );
+                       list( $nonAllQueryString, /*_*/ ) = 
$searchContext->escaper()->fixupWholeQueryString( implode( ' ', $nonAllQuery ) 
);
                        $searchContext->setHighlightQuery(
                                $this->buildHighlightQuery( $searchContext, 
$nonAllFields, $nonAllQueryString, 1 )
                        );
diff --git a/includes/Query/FullTextSimpleMatchQueryBuilder.php 
b/includes/Query/FullTextSimpleMatchQueryBuilder.php
index eadca32..fd31ebe 100644
--- a/includes/Query/FullTextSimpleMatchQueryBuilder.php
+++ b/includes/Query/FullTextSimpleMatchQueryBuilder.php
@@ -2,7 +2,6 @@
 
 namespace CirrusSearch\Query;
 
-use CirrusSearch\Search\Escaper;
 use CirrusSearch\Search\SearchContext;
 use CirrusSearch\SearchConfig;
 
@@ -50,8 +49,8 @@
         */
        private $dismaxSettings;
 
-       public function __construct( SearchConfig $config, Escaper $escaper, 
array $feature, array $settings ) {
-               parent::__construct( $config, $escaper, $feature );
+       public function __construct( SearchConfig $config, array $feature, 
array $settings ) {
+               parent::__construct( $config, $feature );
                $this->fields = $settings['fields'];
                $this->phraseFields = $settings['phrase_rescore_fields'];
                $this->defaultStemWeight = $settings['default_stem_weight'];
diff --git a/includes/Query/InTitleFeature.php 
b/includes/Query/InTitleFeature.php
index 091c437..6177016 100644
--- a/includes/Query/InTitleFeature.php
+++ b/includes/Query/InTitleFeature.php
@@ -2,7 +2,6 @@
 
 namespace CirrusSearch\Query;
 
-use CirrusSearch\Search\Escaper;
 use CirrusSearch\Search\Filters;
 use CirrusSearch\Search\SearchContext;
 
@@ -24,16 +23,6 @@
  *   intitle:"foo OR bar"
  */
 class InTitleFeature extends SimpleKeywordFeature {
-
-       /**
-        * @var Escaper
-        */
-       private $escaper;
-
-       public function __construct( Escaper $escaper ) {
-               $this->escaper = $escaper;
-       }
-
        /**
         * @return string
         */
@@ -53,7 +42,7 @@
         *  string.
         */
        protected function doApply( SearchContext $context, $key, $value, 
$quotedValue, $negated ) {
-               $filter = Filters::intitle( $this->escaper, $context, 
$quotedValue );
+               $filter = Filters::intitle( $context->escaper(), $context, 
$quotedValue );
 
                return [ $filter, !$negated ];
        }
diff --git a/includes/Query/SimpleInSourceFeature.php 
b/includes/Query/SimpleInSourceFeature.php
index 7257f00..a6fa156 100644
--- a/includes/Query/SimpleInSourceFeature.php
+++ b/includes/Query/SimpleInSourceFeature.php
@@ -2,7 +2,6 @@
 
 namespace CirrusSearch\Query;
 
-use CirrusSearch\Search\Escaper;
 use CirrusSearch\Search\Filters;
 use CirrusSearch\Search\SearchContext;
 
@@ -23,16 +22,6 @@
  *   insource:"foo OR bar"
  */
 class SimpleInSourceFeature extends SimpleKeywordFeature {
-
-       /**
-        * @var Escaper
-        */
-       private $escaper;
-
-       public function __construct( Escaper $escaper ) {
-               $this->escaper = $escaper;
-       }
-
        /**
         * @return string
         */
@@ -52,7 +41,7 @@
         *  string.
         */
        protected function doApply( SearchContext $context, $key, $value, 
$quotedValue, $negated ) {
-               $filter = Filters::insource( $this->escaper, $context, 
$quotedValue );
+               $filter = Filters::insource( $context->escaper(), $context, 
$quotedValue );
                $context->addHighlightSource( [ 'query' => $filter ] );
 
                return [ $filter, false ];
diff --git a/includes/Search/SearchContext.php 
b/includes/Search/SearchContext.php
index 90912c7..8fe33dc 100644
--- a/includes/Search/SearchContext.php
+++ b/includes/Search/SearchContext.php
@@ -165,14 +165,19 @@
        private $limitSearchToLocalWiki = false;
 
        /**
-        * @param int The number of seconds to cache results for
+        * @var int The number of seconds to cache results for
         */
        private $cacheTtl = 0;
 
        /**
-        * @param string The original search
+        * @var string The original search
         */
        private $originalSearchTerm;
+
+       /**
+        * @var Escaper $escaper
+        */
+       private $escaper;
 
        /**
         * @param SearchConfig $config
@@ -190,6 +195,7 @@
                        $this->preferRecentDecayPortion = $decay;
                        $this->preferRecentHalfLife = $this->config->get( 
'CirrusSearchPreferRecentDefaultHalfLife' );
                }
+               $this->escaper = new Escaper( $config->get( 'LanguageCode' ), 
$config->get( 'CirrusSearchAllowLeadingWildcard' ) );
        }
 
        public function __clone() {
@@ -666,4 +672,11 @@
        public function setOriginalSearchTerm( $term ) {
                $this->originalSearchTerm = $term;
        }
+
+       /**
+        * @return Escaper
+        */
+       public function escaper() {
+               return $this->escaper;
+       }
 }
diff --git a/includes/Searcher.php b/includes/Searcher.php
index da0c036..c44b4dd 100644
--- a/includes/Searcher.php
+++ b/includes/Searcher.php
@@ -2,7 +2,6 @@
 
 namespace CirrusSearch;
 
-use CirrusSearch\Search\Escaper;
 use CirrusSearch\Search\FullTextResultsType;
 use CirrusSearch\Search\ResultsType;
 use CirrusSearch\Search\RescoreBuilder;
@@ -93,11 +92,6 @@
        protected $indexBaseName;
 
        /**
-        * @var Escaper escapes queries
-        */
-       private $escaper;
-
-       /**
         * @var boolean just return the array that makes up the query instead 
of searching
         */
        private $returnQuery = false;
@@ -146,7 +140,6 @@
                }
                $this->indexBaseName = $index ?: $config->get( 
SearchConfig::INDEX_BASE_NAME );
                $this->language = $config->get( 'ContLang' );
-               $this->escaper = new Escaper( $config->get( 'LanguageCode' ), 
$config->get( 'CirrusSearchAllowLeadingWildcard' ) );
                $this->searchContext = new SearchContext( $this->config, 
$namespaces );
        }
 
@@ -302,7 +295,6 @@
 
                $qb = new $builderSettings['builder_class'](
                        $this->config,
-                       $this->escaper,
                        [
                                // Handle morelike keyword (greedy). This needs 
to be the
                                // very first item until combining with other 
queries
@@ -327,9 +319,9 @@
                                // Handle incategory keyword
                                new Query\InCategoryFeature( $this->config ),
                                // Handle non-regex insource keyword
-                               new Query\SimpleInSourceFeature( $this->escaper 
),
+                               new Query\SimpleInSourceFeature(),
                                // Handle intitle keyword
-                               new Query\InTitleFeature( $this->escaper ),
+                               new Query\InTitleFeature(),
                                // inlanguage keyword
                                new Query\LanguageFeature(),
                                // File types
diff --git a/tests/unit/Query/FullTextQueryStringQueryBuilder.php 
b/tests/unit/Query/FullTextQueryStringQueryBuilder.php
index d1bf53f..d06428b 100644
--- a/tests/unit/Query/FullTextQueryStringQueryBuilder.php
+++ b/tests/unit/Query/FullTextQueryStringQueryBuilder.php
@@ -4,7 +4,6 @@
 
 use CirrusSearch\CirrusTestCase;
 use CirrusSearch\Test\HashSearchConfig;
-use CirrusSearch\Search\Escaper;
 use CirrusSearch\Search\SearchContext;
 use CirrusSearch\Util;
 
@@ -131,9 +130,8 @@
                // mark stripping which is normally done in 
Searcher::searchText()
                $term = Util::stripQuestionMarks( $term, 'all' );
 
-               $config = new HashSearchConfig([]);
-               $escaper = new Escaper('en', false);
-               $builder = new FullTextQueryStringQueryBuilder( $config, 
$escaper, [] );
+               $config = new HashSearchConfig(['wgLanguageCode' => 'en']);
+               $builder = new FullTextQueryStringQueryBuilder( $config, [] );
                $searchContext = new SearchContext( $config );
                $builder->build( $searchContext, $term, false );
                $actual = $searchContext->getSyntaxUsed();
diff --git a/tests/unit/Query/InTitleFeatureTest.php 
b/tests/unit/Query/InTitleFeatureTest.php
index 0ee4aca..3b8fc1d 100644
--- a/tests/unit/Query/InTitleFeatureTest.php
+++ b/tests/unit/Query/InTitleFeatureTest.php
@@ -64,7 +64,11 @@
                        ->with( $isFuzzy );
 
                // This test is kinda-sorta testing the escaper too ... maybe 
not optimal but simple
-               $feature = new InTitleFeature( new Escaper( 'en' ) );
+               $context->expects( $this->once() )
+                       ->method( 'escaper')
+                       ->will( $this->returnValue( new Escaper( 'en' ) ) );
+
+               $feature = new InTitleFeature();
                $this->assertEquals(
                        $expectedTerm,
                        $feature->apply( $context, $term )
@@ -76,7 +80,11 @@
                        ->disableOriginalConstructor()
                        ->getMock();
 
-               $feature = new InTitleFeature( new Escaper( 'en' ) );
+               $context->expects( $this->once() )
+                       ->method( 'escaper')
+                       ->will( $this->returnValue( new Escaper( 'en' ) ) );
+
+               $feature = new InTitleFeature();
                $this->assertEquals( '', $feature->apply( $context, 
'-intitle:mediawiki' ) );
        }
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/323804
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id37932c8da41a3ae3df896c013a519db8e6e59d9
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/CirrusSearch
Gerrit-Branch: master
Gerrit-Owner: DCausse <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to