From 322a191d5db4463aa468f172cadef61b6dfa2d96 Mon Sep 17 00:00:00 2001 From: "Ianis G. Vasilev" Date: Fri, 20 May 2016 01:36:02 +0300 Subject: [PATCH 1/2] Added a mechanism for searching for dscanner.ini upwards through the file hierarchy --- src/main.d | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/src/main.d b/src/main.d index f2d080d..c48cecb 100644 --- a/src/main.d +++ b/src/main.d @@ -429,9 +429,9 @@ version (FreeBSD) version = useXDG; version (OSX) version = useXDG; /** - * Locates the configuration file + * Locates the default configuration file */ -string getConfigurationLocation() +string getDefaultConfigurationLocation() { version (useXDG) { @@ -452,3 +452,40 @@ string getConfigurationLocation() else version (Windows) return CONFIG_FILE_NAME; } + +/** + * Searches upwards from the CWD through the directory hierarchy + */ +string tryFindConfigurationLocation() +{ + auto path = pathSplitter(getcwd()); + string result; + + while (!path.empty) + { + result = buildPath(buildPath(path), CONFIG_FILE_NAME); + + if (exists(result)) + break; + + path.popBack(); + } + + if (path.empty) + return null; + + return result; +} + +/** + * Tries to find a config file and returns the default one on failure + */ +string getConfigurationLocation() +{ + immutable config = tryFindConfigurationLocation(); + + if (config !is null) + return config; + + return getDefaultConfigurationLocation(); +} From 265d102ad3b6a8a98893955103a43888b482f6cd Mon Sep 17 00:00:00 2001 From: "Ianis G. Vasilev" Date: Fri, 20 May 2016 02:33:49 +0300 Subject: [PATCH 2/2] Updated the readme to reflect the CWD-based config file search --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f4d04fc..3dc56d4 100644 --- a/README.md +++ b/README.md @@ -51,10 +51,10 @@ To avoid these cases, it's possible to pass the "--skipTests" option. #### Configuration By default all checks are enabled. Individual checks can be enabled or disabled -by using a configuration file. Running ```dscanner --defaultConfig``` will -generate a default configuration file and print the file's location. The -"--config" option will allow you to specify the path to a configuration file if -you do not want to use the one created by the "--defaultConfig" option. +by using a configuration file. Such a file can be placed, for example, is the root directory of your project. +Running ```dscanner --defaultConfig``` will generate a default configuration file and print the file's location. +You can also specify the path to a configuration file by using the "--config" option if +you want to override the default or the local settings. For each check, three values are possible: * `"disabled"`: the check is not performed. @@ -179,6 +179,7 @@ outline of the file's declarations to stdout. By default Dscanner uses the configuration file given in `$HOME/.config/dscanner/dscanner.ini`. Run `--defaultConfig` to regenerate it. The `--config` option allows one to use a custom configuration file. +If a `dscanner.ini` file is locate in the working directory or any of it's parents, it overrides any other configuration files. ### AST Dump The "--ast" or "--xml" options will dump the complete abstract syntax tree of