Subject: Re: bug#78097: 30.1; editorconfig can pass nil to file-name-directory

From: "Peter J. Jones" <[email-masked]>
Date: Mon, 05 May 2025 09:14:50 +0200

On Sun, May 04 2025, Stefan Monnier wrote:
>>> Could you give a concrete example of how this can happen?
>>
>> Yes.  I want to have `delete-trailing-whitespace' in a `before-save'
>> hook by default but still allow editor config to remove it if
>> "trim_trailing_whitespace" is set to false in the current project.  So I
>> wrote the following function and put it in
>> `editorconfig-get-local-variables-functions':
>>
>> (defun pjones:editorconfig-apply-trim-whitespace (props)
>>   "Conditionally change the trim_trailing_whitespace setting.
>>
>> Enable whitespace trimming unless the editor configuration file
>> explicitly disables it.  PROPS is the hash from the editor configuration
>> file."
>>   (when (null (gethash 'trim_trailing_whitespace props))
>>     (puthash 'trim_trailing_whitespace "true" props)
>>     (editorconfig--get-trailing-ws props)))
>
> I see, thanks.
>
> FWIW, the fact that `editorconfig-get-local-variables-functions' is run
> when there are no `.editorconfig` files is an accident.

The reason I was using `editorconfig-get-local-variables-functions' is
because both `editorconfig-after-apply-functions' and
`editorconfig-hack-properties-functions' are documented to behave that
way but are deprecated and `editorconfig-hack-properties-functions'
reports that `editorconfig-get-local-variables-functions' should be used
instead.

If none of these hooks are available for this purpose can you recommend
a way that I can achieve my goal?

>> Projects that don't have editor configuration files trigger the bug
>> where nil is passed to `file-name-directory'.
>
> IIUC the patch you sent silences the error but also has the effect that
> AFAICT it does not enable `delete-trailing-whitespace` in those files
> for which there is no `.editorconfig`, contrarily to what I understood
> to be your goal.
>
> Was that on purpose?

No.  I was starting to suspect that it wasn't working and after seeing
your patch I now know it's most definitely not working!  I was so deep
in the weeds trying to fix the "stringp nil" issue that I never went
back to see if my fix actually worked.  Sorry about that.

Your patch makes a lot more sense than the non-functional hack I first
posted.

Thanks for the help!

-- 
Peter J. Jones (he/him)
blog: https://freerangebits.com
social: https://fosstodon.org/@devalot
code: https://github.com/pjones