Constant naming convention

Pierre-Yves David pierre-yves.david at ens-lyon.org
Tue Jan 10 10:42:29 EST 2017



On 01/02/2017 11:27 PM, Kevin Bullock wrote:
> A few overall notes on this thread, and then some specific clarifications below:
>
> First, it is not the current project policy to defer any decisions until October 2017. It is also true that none of the core team is advocating radical changes to the way we develop Mercurial, either before or after that date.
>
> Second, this topic is a matter of project policy, so we should take it up as the steering committee if we want to take any further action on it.

To me, that part, and a large share of Ryan emails, highlights the fact 
that we need to spend more time at the steering committee level to 
define our decision process on multiple aspect of the project. For now, 
I would rather see energy put in these definition first, before we start 
discussing more practical aspect of the project as the one here.
My general feeling is that we have been putting the card before the hoax 
here.

>> On Dec 28, 2016, at 10:17, Pierre-Yves David <pierre-yves.david at ens-lyon.org> wrote:
>>
>> On 12/15/2016 11:38 PM, Augie Fackler wrote:
>>> (I’m trying to be brief here - hopefully it doesn’t come across as upset, because I’m not - mostly I was blindsided by a policy claim that I don’t remember.)
>>>
>>>> On Dec 15, 2016, at 3:40 PM, Pierre-Yves David <pierre-yves.david at ens-lyon.org> wrote:
>>>>
>>>> So, to sum up, my stance is "Let us not revisit decision made by Matt for a while". Of course they might be case were we could make an exception if it is really worth it. Code style does not seems to be high profile enough for that (and is a lot of work to adjust).
>>>
>>> In broad strokes, I agree that we should make an effort to not cause a wave of sea change. My perception of this particular issue is that:
>>>
>>> 1) The codebase is already somewhat inconsistent (despite the efforts of mpm and others) when it comes to constant naming
>>
>> My perception (and apparently Kevin's too) is that the codebase is currently consistent¹. A very quick check of the current code seems to confirm it is consistent (but that was a quick check). So, I think you need to back this statement with stronger fact than just your perception.
>
> No, I said there is a _prevailing_ style, not that we have consistency. Augie was not the only one to draw the conclusion that we're not consistent today. There are sufficient exceptions to question the strength of the rule. Thank you for digging up the applicable section in CodingStyle, though. It seems the convention is written down after all.

There seems to be wording confusion here. So lets try to lift some of 
it. Over the course of this thread, I said the described the code base as:

>> consistent for the very vast majority.

and

>> currently consistent¹
>> […]
>> [1] sure there is a handful of exception.

This seemed compatible with your statement that we had a:

> prevailing (though by no means universal) style

You seems to disagree with that compatibility, sorry for misinterpreting 
you.


That said, the question is still open of how consistent the current 
code-base is. In a previous email, I've asked for the people suggesting 
the changes to provide data to justify it. But so far I've only seen two 
peoples expressing feeling that the code base was too inconsistent. 
Feelings are great to bootstrap questions and start leads to potential 
improvements. However I don't think it is reasonable to take actions 
without gathering proper data first. So far, I've not seen actual data. 
Only well known anecdotal exception that don't provide serious 
information in themselves.

So, I went to gather basic data about the actual situation. I used basic 
grepping of assignment without any indentation in mercurial/ and hgext/ 
pythons file. This isn't perfect but that gives some basic data. I've 
filtered out vendor-ed code, many of the re-assignment from other 
modules and code directly tied to a specific OS API. Assignment of both 
type can contains '_', (especially leading '_'). Here are my finding:

upper case assignment:
----------------------

Only 4 modules or packages use "many" upper case constants. 3 is core, 1 
in hgext (various parts of 'convert'). Adding the one with 1 or two 
instances, we got up to 10 modules/package with upper case constants, 
(about 40 assignments total). Most of it is very old code (probably 
prior Matt started enforcing current style) and a few are recent slip in 
style-review.

Detailed data below:

   mercurial/revlog.py (10 cases)
   mercurial/hgweb/ (9 cases)
   mercurial/httpconnection.py 1 case
   mercurial/util.py 2 case
   mercurial/graphmod.py (5 spots)
   hgext/factotum.py 1 cases
   hgext/largefiles/ 1 cases
   hgext/highlight/ 1 cases
   hgext/mq.py 1 case
   hgext/convert/ (8 case)

Lower case assignment:
----------------------

Full check on lower case assignments is harder because there is a large 
quantity of them. I've filtered out thing that standed out as vendored 
code and the vast majority of local assignments from other modules (eg 
'pickle = util.pickle'). The result seems mostly composed of actual 
constant assignment for scanning through it.

That filtering leaves about 500 instances of lower case assignments, 
spread over 120 files.

Conclusion
----------

Lets drop about 20% more of the lowercase assignments and files to take 
in account the imperfect filtering. This still lives use with a 1 vs 10 
ration in favor of lower case for both "assignment count" and "module". 
This is a bit higher than what I expected but still show "upper case" as 
rare occurrence (<10%, handful of modules).

So from my point of view, the occurrence is rare-enough and limited to 
few-enough module to consider the currently documented style (lower for 
all) as vastly prevailing and the code base as overall consistent.
(I'm of course okay with hearing other conclusion based on these data 
(or better data)).

It is also interesting to note that use of upper case is concentrated in 
some key module (eg: revlog, hgweb). That might play a key part in the 
strong contrast in consistency perception between the feeling of the two 
people who said the code to be too inconsistent and my feeling that is 
was overall consistent.



Of course, The extraction I did is fairly basic. For example it does not 
takes in accounts indented, but still module level constants. In 
addition, the data about lower case assignment can be refined further. 
But I already spent more time digging this that I was willing to, so I 
did not went further. If someone else wants to keeps digging, feels free 
to do it.

> […]

Cheers,

-- 
Pierre-Yves David


More information about the Mercurial-devel mailing list