Sample
Scalabrio105
Human rating uses the original dataset scale.
Scores
| Method | Score | Scale | Dataset rank (0–100) |
|---|---|---|---|
| Posnett | 0.001 | 0–1; higher is more readable | 74.9Δ 8.8 |
| Scalabrino | 0.468 | 0–1; higher is more readable | 45.7Δ 20.4 |
| Dorn | 0.494 | 0–1; higher is more readable | 56.8Δ 9.3 |
| Mi | 0.239 | 0–1; higher is more readable | 52.3Δ 13.8 |
| LLOC | 4 | Logical lines; fewer is more readable | 93.7Δ 27.6 |
| DeepSeek V4 Pro | 5 | 0–20; mean of three runs | 0.0Δ 66.1 |
| GPT-6.1 Sol | 17.33 | 0–20; mean of three runs | 71.9Δ 5.8 |
| BTTF | 0.646 | 0–1; higher is more readable | 81.4Δ 15.3 |
| Human | 3.89 | 1–5; original rating | 66.1 |
Views
Select the downloaded ZIP or its extracted folder. Files stay in your browser.
Loading feature diagnosis…
Source regions
Feature contributions
Feature contributions
| Feature | Value | Contribution (log-odds) |
|---|---|---|
| Halstead volumeHow much symbolic information the code contains. It combines the total number of operators and values with the number of distinct ones. | 400 | −13.2 |
| Byte entropyHow varied the bytes in the source text are. Repeated bytes give a lower value; a more even mixture gives a higher value. | 4.907 | −7.361 |
| Source linesThe number of non-empty source lines. | 11 | +4.4 |
Intercept 8.87 + feature contributions = -7.291 (log-odds).
Score = sigmoid(-7.291) = 0.001.
| Score | 0.468 |
|---|
Feature contributions
| Feature | Value | Contribution (log-odds) |
|---|---|---|
| Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code. | 1 | +1.001 |
| Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right. | 0 | −0.804 |
| Indentation frequencyHow rapidly indentation changes from line to line. | 11 | −0.357 |
| Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom. | 9.841 | −0.272 |
| Identifier layout (horizontal)How rapidly the visual pattern of identifier characters changes from left to right. It measures spatial frequency, not the meaning of the names. | 81 | +0.234 |
| Number layout frequencyHow rapidly the number of numeric values per line changes through the code. | 11 | +0.168 |
| Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *. | 0.104 | −0.065 |
Intercept 0.07 + feature contributions = -0.025 (log-odds).
Score = sigmoid(-0.025) = 0.494.
| Score | 0.239 |
|---|
| Score | 4 |
|---|
Run 1
The code is difficult to read due to a deeply tangled structure. It repeatedly calls six getter methods inside a loop, making the intent unclear and the line extremely long. The loop variable 'i' indexes multiple parallel arrays, which obscures the relationship between the data elements. Action granularity is poor—many operations are squeezed into a single line. The method name is somewhat descriptive, but the body lacks clarity. Overall, the code has poor structure, excessive nesting-free but sprawling expressions, and low readability.
Run 2
The method has a single logical purpose but is largely unreadable due to its monolithic structure. The loop body performs six distinct closure calls in a single statement, violating action granularity and making it difficult to scan. The repeated accessor calls (getSubclassPropertyNameClosure(), getSubclassPropertyTypeClosure(), etc.) are redundant, deeply indexed, and obscure the intent. The method signature and variable names have some clarity, but the implementation is verbose, repetitive, and hard to follow. Overall, the code is tangled and would benefit from extracting closures into local variables and calling a single well-named method per property.
Run 3
The code has several readability issues. The method name is clear, but the implementation is problematic: multiple getter calls to closure arrays are repeated inside the loop, making each line excessively long and hard to scan. The loop condition calls getSubclassPropertyNameClosure().length without caching, forcing readers to parse repeated method invocations. The action of calling propertyMapping.initPropertyPaths with seven arguments on one line violates the one-action-per-line principle and creates a dense, difficult-to-read call signature. While the overall structure is logically simple (a single loop with one operation), the lack of intermediate variables, line breaks, or explanatory comments makes the intent harder to grasp. Nesting is minimal, which is good, but the reading flow suffers from the long parameter list and repeated getter calls. Overall, the code needs refactoring for clarity.
Run 1
Code Structure: A single method with one loop is logically organized. Nesting: Only one shallow loop keeps complexity low. Clarity of intent: Descriptive method names clearly indicate property-path initialization, though parallel arrays and numerous positional arguments require careful matching. Code length: Concise, with no unnecessary logic; repeated getter calls add minor visual noise. Action granularity: One initialization call per iteration, with each argument on a separate line for easy scanning. Reading flow: Natural top-to-bottom progression and consistent formatting make the code easy to follow.
Run 2
Code Structure: A single focused method logically iterates through properties and initializes their mappings. Nesting: Only one loop, keeping control flow shallow. Clarity of intent: Descriptive method and accessor names communicate the purpose, though the many positional arguments and parallel arrays require careful matching. Code length: Concise, with no unnecessary logic, but repeated long accessor calls add visual noise. Action granularity: One initialization call per iteration; placing each argument on its own line helps readability. Reading flow: Straightforward top-to-bottom execution with consistent formatting, slightly hindered by the long argument list.
Run 3
Code Structure: A single method with one loop is logically organized. Nesting: Only one loop level keeps complexity low. Clarity of intent: Descriptive method names clearly communicate property-path initialization, though the long positional argument list and parallel arrays require careful alignment. Code length: Concise overall, but repeated closure getters add visual noise. Action granularity: One initialization call per iteration, with each argument on its own line, makes the operation easy to inspect. Reading flow: The loop and consistently ordered arguments read naturally, although long identifiers and uneven indentation slightly reduce scanability.