library which.src.candidate_paths; | |
import 'dart:io'; | |
import 'package:path/path.dart'; | |
Iterable<String> getCandidatePaths(String command, Map<String, String> environment, bool isWindows, Context context) { | |
if (context.isAbsolute(command)) return [command]; | |
String getEnvVar(String envVar, String defaultValue) { | |
var v = environment[envVar]; | |
return v == null ? defaultValue : v; | |
} | |
var pathVarSeparator = isWindows ? ";" : ":"; | |
List<String> splitEnvVar(String envVar, String defaultValue) => | |
getEnvVar(envVar, defaultValue).split(pathVarSeparator); | |
var pathEnv = splitEnvVar('PATH', ''); | |
var noExtPaths = | |
pathEnv.map((pathEntry) => context.join(pathEntry, command)); | |
if (!isWindows) return noExtPaths; | |
pathEnv.insert(0, context.current); | |
var pathExt = splitEnvVar('PATHEXT', ".EXE"); | |
if (command.contains('.')) pathExt.insert(0, ''); | |
return noExtPaths.expand((commandPath) => | |
pathExt.map((pathExtEntry) => commandPath + pathExtEntry)); | |
} | |
Iterable<String> getRealCandidatePaths(String command) => | |
getCandidatePaths(command, Platform.environment, Platform.isWindows, context); |