)]}'
{
  "commit": "8fa18c7fe307bc86b53c1ba442a96cfb26b9ed8f",
  "tree": "a5931486d53349029dfd4de6c4a3754854b73775",
  "parents": [
    "ff7205c1616df44119ef1a598c95b31977ba8620"
  ],
  "author": {
    "name": "Low, Zhi Hao",
    "email": "lowzhao@gmail.com",
    "time": "Sat Nov 08 16:33:49 2025 +0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Sat Nov 08 09:33:49 2025 +0100"
  },
  "message": "Handle FunctionDef blockstart_tolineno edge cases (#2880)\n\nGetting the lineno of the start of the block for function definition(`FunctionDef.blockstart_tolineno`) can be quite tricky. Take below example:\n\n```python\n# Case A\ndef foo(bar: str) -\u003e None: \n    pass\n# should returns line\u003d1\n\n# Case B\ndef foo(\n        bar:str): \n    pass\n# should returns line\u003d2\n\n# Case C\ndef foo(\n    bar:str\n) -\u003e None: \n    pass\n# should returns line\u003d3\n\n# Case D\ndef foo(\n    bar:str\n): \n# should returns line\u003d3\n    pass\n```\n\nCurrently we only handled Case A, B. With this commit we can cover case C. \n\nBut for Case D, we will need a better solution",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "8035008fdc2edb7eb148f7ac59592a064abce440",
      "old_mode": 33188,
      "old_path": "astroid/nodes/scoped_nodes/scoped_nodes.py",
      "new_id": "d769b07b9f7e7a77a7e32e7b8819ed6e3da6726f",
      "new_mode": 33188,
      "new_path": "astroid/nodes/scoped_nodes/scoped_nodes.py"
    },
    {
      "type": "modify",
      "old_id": "c95f53fd36084b2427bfd6e24b56d831eff2cdac",
      "old_mode": 33188,
      "old_path": "tests/test_scoped_nodes.py",
      "new_id": "875ee057b55ae479c908ed44dd4fe80f70494f0a",
      "new_mode": 33188,
      "new_path": "tests/test_scoped_nodes.py"
    }
  ]
}
