///|
fn env_pairs(arguments : String) -> Array[(String, String)] {
  let result : Array[(String, String)] = []
  let parts = tokens(arguments)
  if parts.length() == 0 {
    return result
  }
  if !parts[0].contains("=") {
    let key = parts[0]
    let (_, rest) = first_token(arguments)
    result.push((key, rest.trim().to_owned()))
    return result
  }
  for part in parts {
    match part.split_once("=") {
      None => ()
      Some((key, value)) => result.push((key.to_owned(), value.to_owned()))
    }
  }
  result
}

///|
fn check_env(inst : Instruction, diagnostics : Array[Diagnostic]) -> Unit {
  let pairs = env_pairs(inst.arguments)
  if pairs.length() == 0 {
    diagnostics.push(
      diagnostic(
        "DL3044",
        "warning",
        inst.line,
        "Do not use empty ENV instructions.",
      ),
    )
    return
  }
  for pair in pairs {
    let (key, value) = pair
    if key.is_empty() || value.trim().is_empty() {
      diagnostics.push(
        diagnostic(
          "DL3044",
          "warning",
          inst.line,
          "Do not use environment variables without a value.",
        ),
      )
    }
  }
}