Documentation

Lean.Attributes

Instances For
    @[reducible, inline]
    abbrev Lean.AttrM (α : Type) :
    Equations
      Instances For
        Instances For

          You can tag attributes with the 'local' or 'scoped' kind. For example: attribute [local myattr, scoped yourattr, theirattr].

          This is used to indicate how an attribute should be scoped.

          • local means that the attribute should only be applied in the current scope and forgotten once the current section, namespace, or file is closed.
          • scoped means that the attribute should only be applied while the namespace is open.
          • global means that the attribute should always be applied.

          Note that the attribute handler (AttributeImpl.add) is responsible for interpreting the kind and making sure that these kinds are respected.

          Instances For
            Instances For

              Low level attribute registration function.

              Equations
                Instances For

                  Helper methods for decoding the parameters of builtin attributes that are defined before Lean.Parser. We have the following ones:

                  @[builtin_attr_parser] def simple     := leading_parser ident >> optional (ppSpace >> (priorityParser <|> ident))
                  @[builtin_attr_parser] def «macro»    := leading_parser "macro " >> ident
                  @[builtin_attr_parser] def «export»   := leading_parser "export " >> ident
                  

                  Note that we need the parsers for class, instance, export and macros because they are keywords.

                  Equations
                    Instances For
                      Equations
                        Instances For
                          Equations
                            Instances For
                              Equations
                                Instances For
                                  Equations
                                    Instances For
                                      Equations
                                        Instances For
                                          Equations
                                            Instances For

                                              Tag attributes are simple and efficient. They are useful for marking declarations in the modules where they were defined.

                                              The startup cost for this kind of attribute is very small since addImportedFn is a constant function.

                                              They provide the predicate tagAttr.hasTag env decl which returns true iff declaration decl is tagged in the environment env.

                                              Instances For
                                                def Lean.registerTagAttribute (name : Name) (descr : String) (validate : NameAttrM Unit := fun (x : Name) => pure ()) (ref : Name := by exact decl_name%) (applicationTime : AttributeApplicationTime := AttributeApplicationTime.afterTypeChecking) :
                                                Equations
                                                  Instances For
                                                    Equations
                                                      Instances For

                                                        A TagAttribute variant where we can attach parameters to attributes. It is slightly more expensive and consumes a little bit more memory than TagAttribute.

                                                        They provide the function pAttr.getParam env decl which returns some p iff declaration decl contains the attribute pAttr with parameter p.

                                                        Instances For
                                                          Instances For
                                                            Equations
                                                              Instances For
                                                                Equations
                                                                  Instances For
                                                                    structure Lean.EnumAttributes (α : Type) :

                                                                    Given a list [a₁, ..., a_n] of elements of type α, EnumAttributes provides an attribute Attr_i for associating a value a_i with an declaration. α is usually an enumeration type. Note that whenever we register an EnumAttributes, we create n attributes, but only one environment extension.

                                                                    Instances For
                                                                      def Lean.registerEnumAttributes {α : Type} (attrDescrs : List (Name × String × α)) (validate : NameαAttrM Unit := fun (x : Name) (x : α) => pure ()) (applicationTime : AttributeApplicationTime := AttributeApplicationTime.afterTypeChecking) (ref : Name := by exact decl_name%) :
                                                                      Equations
                                                                        Instances For
                                                                          def Lean.EnumAttributes.getValue {α : Type} [Inhabited α] (attr : EnumAttributes α) (env : Environment) (decl : Name) :
                                                                          Equations
                                                                            Instances For
                                                                              def Lean.EnumAttributes.setValue {α : Type} (attrs : EnumAttributes α) (env : Environment) (decl : Name) (val : α) :
                                                                              Equations
                                                                                Instances For

                                                                                  Attribute extension and builders. We use builders to implement attribute factories for parser categories.

                                                                                  @[reducible, inline]
                                                                                  Equations
                                                                                    Instances For
                                                                                      @[reducible, inline]
                                                                                      Equations
                                                                                        Instances For
                                                                                          Equations
                                                                                            Instances For
                                                                                              Instances For
                                                                                                @[reducible, inline]
                                                                                                Equations
                                                                                                  Instances For
                                                                                                    Equations
                                                                                                      Instances For
                                                                                                        @[implemented_by Lean.mkAttributeImplOfConstantUnsafe]
                                                                                                        @[export lean_is_attribute]

                                                                                                        Return true iff n is the name of a registered attribute.

                                                                                                        Equations
                                                                                                          Instances For

                                                                                                            Return the name of all registered attributes.

                                                                                                            Equations
                                                                                                              Instances For
                                                                                                                Equations
                                                                                                                  Instances For
                                                                                                                    @[export lean_attribute_application_time]
                                                                                                                    Equations
                                                                                                                      Instances For
                                                                                                                        def Lean.isAttribute (env : Environment) (attrName : Name) :
                                                                                                                        Equations
                                                                                                                          Instances For
                                                                                                                            Equations
                                                                                                                              Instances For
                                                                                                                                Equations
                                                                                                                                  Instances For
                                                                                                                                    Equations
                                                                                                                                      Instances For
                                                                                                                                        def Lean.Attribute.add (declName attrName : Name) (stx : Syntax) (kind : AttributeKind := AttributeKind.global) :
                                                                                                                                        Equations
                                                                                                                                          Instances For
                                                                                                                                            def Lean.Attribute.erase (declName attrName : Name) :
                                                                                                                                            Equations
                                                                                                                                              Instances For
                                                                                                                                                @[export lean_update_env_attributes]

                                                                                                                                                updateEnvAttributes implementation

                                                                                                                                                Equations
                                                                                                                                                  Instances For
                                                                                                                                                    @[export lean_get_num_attributes]

                                                                                                                                                    getNumBuiltinAttributes implementation

                                                                                                                                                    Equations
                                                                                                                                                      Instances For