W0058 - Can't find include file
Error
-module(example).
-include("missing_header.hrl").
%% error: W0058: can't find include file "missing_header.hrl"
-include_lib("missing_app/include/header.hrl").
%% error: W0058: can't find include lib "missing_app/include/header.hrl"
This diagnostic is triggered when an include file referenced by -include() or
-include_lib() cannot be resolved by the ELP native diagnostic processing.
The file path cannot be found in the search paths available to ELP.
Important: This diagnostic corresponds to Erlang service diagnostic E1516 (can't find include file/lib). W0058 only appears when the corresponding Erlang service diagnostic does not appear. If you see W0058 in a Buck project, it is likely a sign that the project is not defined properly in your TARGETS file.
Common Causes
- Missing file: The include file does not exist at the specified path.
- Incorrect path: The path to the include file is incorrect or misspelled.
- Missing application dependency: For
-include_lib(), the referenced application is not listed as a dependency. - Incorrect include path configuration: The directory containing the header file is not in the configured include paths.
Fix
Verify the file exists
Make sure the include file exists at the expected location.
Fix the path
Correct the path to match the actual file location:
-module(example).
% Correct path to the include file
-include("correct_header.hrl").
% Correct application name and path
-include_lib("correct_app/include/header.hrl").
Add missing dependency
For -include_lib(), ensure the application is listed as a dependency in your
build configuration:
rebar.config:
{deps, [
missing_app
]}.
Buck TARGETS file:
erlang_app(
name = "my_app",
deps = [
"//path/to:missing_app",
],
)
Configure include paths
Ensure the directory containing the header file is in your project's include paths configuration.
Relationship to Erlang Service Diagnostics
W0058 is filtered out when the Erlang service reports the corresponding diagnostic:
- E1516: can't find include file/lib
When both diagnostics detect the same issue, only the Erlang service diagnostic will be shown to avoid duplication.
Buck Project Configuration
If you see W0058 in a Buck project, this typically indicates that your TARGETS file is not properly configured. The Erlang service relies on Buck to understand the project structure, dependencies, and include paths. Check that:
- All application dependencies are declared in the
depsattribute - For
-include_lib()directives, the referenced application is included as a dependency - Include paths are properly configured with the
includeorinclude_libattributes - The header file is defined in a dependency of the buck target holding the current file