microsoft / microsoft/TypeScript

"File name X differs from Y only in casing." problem when using webpack style path alias

Open
#53,767 0 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Bug Domain: Module Resolution Help Wanted
Dominant language
Go
Stars
111k
Forks
14.3k
Avg merge
1d 19h
Merged PRs (30d)
117

Description

Type: Bug

I am using webpack-style path aliases for Javascript imports. For example:

import { Pricing } from 'SRC/pricing.mjs';

with a jsconfig.json that looks like this:

{
    "compilerOptions": {
      "module": "es6",
      "target": "es6",
    },
    "baseUrl": ".",
    "paths": {
      "SRC/*": ["./src/*"]
    }
}

With the result that SRC/pricing.mjs is replaced with {baseurl}/src/pricing.mjs no matter what directory the importing code lives in.

This works fine, however I get warnings like the following in the 'Problems' view:

File name '<path to project>/SRC/pricing.mjs' differs from already included file name '<path to project>/src/pricing.mjs' only in casing.
  The file is in the program because:
    Matched by default include pattern '**/*'
    Imported via 'SRC/pricing.mjs' from file '<path to project>/src/page/index-client.js'
    Imported via 'SRC/pricing.mjs' from file '<path to project>/src/page/index-html.js'
    Imported via 'SRC/pricing.mjs' from file '<path to project>/src/page/pricing-calculator-client.js'
    Imported via 'SRC/pricing.mjs' from file '<path to project>/src/page/pricing-calculator-html.js'

I think the code that checks for case insensitivity issues might not be fully / correctly aware of how jsconfig.son path aliases work.

I can workaround the issue by adding "forceConsistentCasingInFileNames": false to compilerOptions however then I don't get the general benefit of this problem detection.

If I use SRC2 or $SRC instead of SRC everything is fine.

VS Code version: Code 1.77.3 (Universal) (704ed70d4fd1c6bd6342c436f1ede30d1cff4710, 2023-04-12T09:19:37.325Z)
OS version: Darwin arm64 22.4.0
Modes:
Sandboxed: Yes

System Info
Item Value
CPUs Apple M1 Pro (10 x 24)
GPU Status 2d_canvas: enabled
canvas_oop_rasterization: disabled_off
direct_rendering_display_compositor: disabled_off_ok
gpu_compositing: enabled
metal: disabled_off
multiple_raster_threads: enabled_on
opengl: enabled_on
rasterization: enabled
raw_draw: disabled_off_ok
skia_renderer: enabled_on
video_decode: enabled
video_encode: enabled
vulkan: disabled_off
webgl: enabled
webgl2: enabled
webgpu: disabled_off
Load (avg) 2, 2, 2
Memory (System) 16.00GB (0.23GB free)
Process Argv --disable-extensions . --crash-reporter-id eef3215b-4736-49de-82a2-9fef6d51c723
Screen Reader no
VM 0%
Extensions disabled
A/B Experiments
vsliv368cf:30146710
vsreu685:30147344
python383:30185418
vspor879:30202332
vspor708:30202333
vspor363:30204092
vslsvsres303:30308271
vserr242cf:30382550
pythontb:30283811
vsjup518:30340749
pythonptprofiler:30281270
vshan820:30294714
vstes263cf:30335440
vscorecescf:30445987
pythondataviewer:30285071
vscod805cf:30301675
binariesv615:30325510
bridge0708:30335490
bridge0723:30353136
cmake_vspar411:30581797
vsaa593cf:30376535
pythonvs932:30410667
cppdebug:30492333
vscaac:30438847
vsclangdc:30486549
c4g48928:30535728
dsvsc012:30540252
pynewext54:30695312
azure-dev_surveyonecf:30548226
nodejswelcome1cf:30587006
2e4cg342:30602488
pyind779:30671433
89544117:30613380
vscrp:30673768
pythonsymbol12:30671437
2i9eh265:30646982
vsctsb:30705553
pythonb192:30669360
defaultazurewalk:30687958
pythonms35:30701012
pythonclientmv:30708685

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the diagnostic with the shown jsconfig.json and the SRC/pricing.mjs imports. Compare how the aliased path and the real src/pricing.mjs path are reported, while keeping forceConsistentCasingInFileNames enabled. Done means valid webpack-style aliases no longer produce a casing warning, without disabling general casing checks.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, typescript
Domain
compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.