Use indents to generate context for diffs
### Problem to solve. Often diffs are missing the context of where the code is written (condition or loop, function, class, XML element, JSON element). ### Proposal A good heuristic might be to look at indents as most file formats today indent more specific parts. The context for line A would be line B if: 1. B appears before A 2. B's indent (prefix tab count of space count) is lower than A's indent The full context for line A would be B and it's own context recursively. That would make a patch change from (using https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/22207/diffs as an example): <pre> @-179,6 +180,7 @@ module QA ... autoload :Repository, 'qa/page/project/settings/repository' autoload :CICD, 'qa/page/project/settings/ci_cd' autoload :DeployKeys, 'qa/page/project/settings/deploy_keys' + autoload :DeployTokens, 'qa/page/`ject/settings/deploy_tokens' autoload :ProtectedBranches, 'qa/page/project/settings/protected_branches' autoload :SecretVariables, 'qa/page/project/settings/secret_variables' autoload :Runners, 'qa/page/project/settings/runners' ... </pre> to <pre> @-179,6 +180,7 @@ module QA *module QA * module Page * module Project * module Settings ... autoload :Repository, 'qa/page/project/settings/repository' autoload :CICD, 'qa/page/project/settings/ci_cd' autoload :DeployKeys, 'qa/page/project/settings/deploy_keys' + autoload :DeployTokens, 'qa/page/`ject/settings/deploy_tokens' autoload :ProtectedBranches, 'qa/page/project/settings/protected_branches' autoload :SecretVariables, 'qa/page/project/settings/secret_variables' autoload :Runners, 'qa/page/project/settings/runners' ... </pre> which allows identification of context in a single glance. ### What does success look like, and how can we measure that? Success can be measured by less repetitive "expand" actions to discover the true context of the change. ### Links / references
issue