      cdef object _prepare_special_spans(self, Doc doc, vector[SpanC] &filtered):
          spans = [doc[match.start:match.end] for match in filtered]
          cdef bint modify_in_place = True
          cdef int curr_length = doc.length
          cdef int max_length
          cdef int span_length_diff = 0
          span_data = {}
          for span in spans:
              rule = self._rules.get(span.text, None)
              span_length_diff = 0
 
</s> remove     cdef int _unused_int1
 </s> add  </s> remove     # TODO next two are unused and should be removed in v4
 </s> add     # TODO convert to bool in v4
    cdef int _faster_heuristics
    # TODO next one is unused and should be removed in v4
        cdef int max_length = 0
      cdef object _prepare_special_spans(self, Doc doc, vector[SpanC] &filtered):
          spans = [doc[match.start:match.end] for match in filtered]
          cdef bint modify_in_place = True
          cdef int curr_length = doc.length
        cdef int max_length = 0
          cdef int span_length_diff = 0
          span_data = {}
          for span in spans:
              rule = self._rules.get(span.text, None)
              span_length_diff = 0
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