Skip to content

Instantly share code, notes, and snippets.

@alreadydone
Created November 27, 2024 02:30
Show Gist options
  • Save alreadydone/4533d35def474651f235fdded6e1ae95 to your computer and use it in GitHub Desktop.
Save alreadydone/4533d35def474651f235fdded6e1ae95 to your computer and use it in GitHub Desktop.

I'll break down this Lean code line by line:

elab tk:"#trans_imports" stx:(str)? : command => do
  • This line defines a custom Lean elaborator (command) named #trans_imports
  • tk:"#trans_imports" specifies the syntax for invoking this command
  • stx:(str)? means the command optionally takes a string argument
  • : command => indicates this is a command-level elaborator
  • do starts a do-block for sequential imperative-style operations
let imports := (← getEnv).allImportedModuleNames
  • ← getEnv retrieves the current environment
  • .allImportedModuleNames gets a list of all transitively imported module names
  • Assigns this list to the imports variable
let currMod := if let mod@(.str _ _) := ← getMainModule then m!"'{mod}' has " else ""
  • ← getMainModule retrieves the current main module
  • Pattern matches to check if it's a string-based module name
  • If it is, creates a formatted string with the module name
  • Otherwise, sets currMod to an empty string
let rest := match stx with
    | none => m!""
    | some str =>
      let imps := imports.filterMap fun (i : Name) =>
        if i.toString.startsWith str.getString then some i else none
      m!"\n\n{imps.size} starting with {str}:\n{imps.qsort (·.toString < ·.toString)}"
  • Pattern matches on the optional string argument stx
  • If no argument (none), rest is an empty string
  • If an argument exists (some str):
    • filterMap creates a new list of imports that start with the given string
    • qsort sorts the filtered imports alphabetically
    • Creates a formatted string showing the number of matching imports and their names
logInfoAt tk m!"{currMod}{imports.size} transitive imports{rest}"
  • logInfoAt tk logs an informational message at the specified token
  • Formats a message showing:
    • The current module name (if applicable)
    • Total number of transitive imports
    • Optional additional details about filtered imports (if a string argument was provided)

This appears to be a Lean command that lists all transitively imported modules, with an optional filter to show only modules starting with a specific string.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment