          if stale_special is not NULL:
              self.mem.free(stale_special)
          self._rules[string] = substrings
          self._flush_cache()
          if self.find_prefix(string) or self.find_infix(string) or self.find_suffix(string) or " " in string:
              self._special_matcher.add(string, None, self._tokenize_affixes(string, False))
  
      def _reload_special_cases(self):
          self._flush_cache()
          self._flush_specials()
 
</s> remove         cdef int max_length
 </s> add         cdef int max_length = 0
        if not self.faster_heuristics or self.find_prefix(string) or self.find_infix(string) or self.find_suffix(string) or " " in string:
          if stale_special is not NULL:
              self.mem.free(stale_special)
          self._rules[string] = substrings
          self._flush_cache()
        if not self.faster_heuristics or self.find_prefix(string) or self.find_infix(string) or self.find_suffix(string) or " " in string:
              self._special_matcher.add(string, None, self._tokenize_affixes(string, False))
  
      def _reload_special_cases(self):
          self._flush_cache()
          self._flush_specials()
keep keep keep keep replace keep keep keep keep keep
 Add tokenizer option to allow Matcher handling for all rules (#10452)

* Add tokenizer option to allow Matcher handling for all rules

Add tokenizer option `with_faster_rules_heuristics` that determines
whether the special cases applied by the internal `Matcher` are filtered
by whether they contain affixes or space. If `True` (default), the rules
are filtered to prioritize speed over rare edge cases. If `False`, all
rules are included in the final `Matcher`-based pass over the doc.

* Reset all caches when reloading special cases

* Revert "Reset all caches when reloading special cases"

This reverts commit 4ef6bd171d00da01cbabc3bcde00088ba4bd5578.

* Initialize max_length properly

* Add new tag to API docs

* Rename to faster heuristics 
spacy/tokenizer.pyx