        (1 'font-lock-variable-name-face append))
       (fstar-find-subtype-annotation
        (0 'fstar-subtype-face append))
-      ("%\\[\\([^]]+\\)\\]"
+      (,(fstar--fl-conditional-matcher "%\\[\\([^]]+\\)\\]" #'fstar--in-code-p)
        (1 'fstar-decreases-face append))
       (fstar--find-quantifier-and-args
        (1 'font-lock-keyword-face)

(defconst fstar-syntax-headers
  `(,@fstar-syntax-preprocessor-directives ,@fstar-syntax-structural-headers))

(defconst fstar-syntax-structural-qualifiers
  '("new" "abstract" "logic" "assume" "visible"
    "unfold" "irreducible" "inline_for_extraction" "noeq" "noextract"
    "private" "opaque" "total" "default" "reifiable" "reflectable"))

(defconst fstar-syntax-qualifiers
  `("assume" ,@fstar-syntax-structural-qualifiers))

(defconst fstar-syntax-block-header-re
  (format "^\\(?:%s \\)*%s "
          (regexp-opt fstar-syntax-qualifiers)
          (regexp-opt fstar-syntax-headers))
  "Regexp matching headers to display in the outline buffer.")

(defconst fstar-syntax-block-start-re
  (format "^\\(?:%s \\)*%s "

      (goto-char end))
    found))

(defmacro fstar--fl-conditional-matcher (re cond)
  "Create a matcher for RE predicated on COND."
  `(apply-partially #'fstar--re-search-predicated-forward ,cond ,re))

(defconst fstar-syntax-additional
  (let ((id fstar-syntax-id))
    `((,fstar-syntax-cs
       (0 'font-lock-type-face))
      (,fstar-syntax-universe
       (1 'fstar-universe-face))
      (,(fstar--fl-conditional-matcher "`.+?`" #'fstar--in-code-p)
       (0 'fstar-operator-face append))
      ("^[[:space:]]*\\(@summary\\)\\_>"
       (1 'font-lock-constant-face prepend))
      (,(fstar--fl-conditional-matcher (concat "{\\(:" id "\\) *\\([^}]*\\)}") #'fstar--in-code-p)
       (1 'font-lock-builtin-face append)
       (2 'fstar-attribute-face append))
      (,(concat "\\_<\\(let\\(?: +rec\\)?\\|and\\)\\_>\\(\\(?: +" id "\\( *, *" id "\\)*\\)?\\)")
