mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
v.util: cleanup util.path_styled_for_error_messages/1
This commit is contained in:
parent
c77344e0a2
commit
675c362f57
@ -75,22 +75,36 @@ fn color(kind string, msg string) string {
|
|||||||
|
|
||||||
const normalised_workdir = os.wd_at_startup.replace('\\', '/') + '/'
|
const normalised_workdir = os.wd_at_startup.replace('\\', '/') + '/'
|
||||||
|
|
||||||
// path_styled_for_error_messages returns the modified file path according
|
const verror_paths_absolute = os.getenv('VERROR_PATHS') == 'absolute'
|
||||||
// to the user's preference (`VERROR_PATHS` env-var)
|
|
||||||
pub fn path_styled_for_error_messages(path_ string) string {
|
// path_styled_for_error_messages converts the given file `path`, into one suitable for displaying
|
||||||
mut path := path_
|
// in error messages, produced by the V compiler.
|
||||||
verror_paths_override := os.getenv('VERROR_PATHS')
|
//
|
||||||
if verror_paths_override == 'absolute' {
|
// When the file path is prefixed by the working folder, usually that means, that the resulting
|
||||||
path = os.real_path(path)
|
// path, will be relative to the current working folder. Relative paths are shorter and stabler,
|
||||||
} else {
|
// because they only depend on the project, and not on the parent folders.
|
||||||
// always use `/` in the error paths, to ensure the compiler output does not vary in the tests:
|
// If the current working folder of the compiler is NOT a prefix of the given path, then this
|
||||||
path = path.replace('\\', '/')
|
// function will return an absolute path isntead. Absolute paths are longer, and platform/user
|
||||||
if path.starts_with(util.normalised_workdir) {
|
// but they have the advantage of being more easily processible by tools on the same machine.
|
||||||
// Get a relative path to the compiler's workdir, when possible:
|
//
|
||||||
path = path.replace_once(util.normalised_workdir, '')
|
// The V user can opt out of that relativisation, by setting the environment variable VERROR_PATHS,
|
||||||
}
|
// to `absolute`. That is useful for starting the V compiler from an IDE or another program, where
|
||||||
|
// the concept of a "current working folder", is not as clear as working manually with the compiler
|
||||||
|
// in a shell. By setting VERROR_PATHS=absolute, the IDE/editor can ensure, that the produced error
|
||||||
|
// messages will have file locations that are easy to find and jump to locally.
|
||||||
|
//
|
||||||
|
// NOTE: path_styled_for_error_messages will *always* use `/` in the error paths, no matter the OS,
|
||||||
|
// to ensure stable compiler error output in the tests.
|
||||||
|
pub fn path_styled_for_error_messages(path string) string {
|
||||||
|
mut rpath := os.real_path(path)
|
||||||
|
rpath = rpath.replace('\\', '/')
|
||||||
|
if util.verror_paths_absolute {
|
||||||
|
return rpath
|
||||||
}
|
}
|
||||||
return path
|
if rpath.starts_with(util.normalised_workdir) {
|
||||||
|
rpath = rpath.replace_once(util.normalised_workdir, '')
|
||||||
|
}
|
||||||
|
return rpath
|
||||||
}
|
}
|
||||||
|
|
||||||
// formatted_error - `kind` may be 'error' or 'warn'
|
// formatted_error - `kind` may be 'error' or 'warn'
|
||||||
|
Loading…
Reference in New Issue
Block a user