Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

A group should only match if a former one didn't match already #64

Open
DamienCassou opened this issue Jan 20, 2021 · 4 comments
Open

Comments

@DamienCassou
Copy link

DamienCassou commented Jan 20, 2021

Here is a typical sorting we want:

class Foo extends MyFrameworkObject {
  _initialize() { ... }

  doSomething() { ... }
  _partOfSomething() { ... }
}

More explicitely:

  • _initialize() should always come first (this is a kind of constructor)
  • then should come public methods
  • then should come private methods except _initialize()

I don't know how to specify that private methods but _initialize() should come last. Whatever I try, I always get an error message saying that doSomething() should arrive before _initialize(). Here is an example configuration that doesn't work:

[
    2,
    {
	order: [
	    "[initialize-methods]",
	    "[public-methods]",
	    "[private-methods]",
	],
	groups: {
	    "initialize-methods": [
		{
		    name: "/^_initialize/",
		    type: "method",
		},
	    ],
	    "public-methods": [
		{
		    name: "/^[^_].+/",
		    type: "method",
		    static: false,
		},
	    ],
	    "private-methods": [
		{
		    name: "/^_.+/",
		    type: "method",
		    static: false,
		},
	    ],
	},
    },
]
@DamienCassou
Copy link
Author

I have another similar problem: some classes have rendering methods whose name contains "render". A rendering method can be either public or private. I want this order:

  1. [initialize-methods]
  2. [public-non-rendering-methods]
  3. [public-rendering-methods]
  4. [private-rendering-methods]
  5. [private-non-rendering-methods]

From what I understand, I can't implement this scheme for the same reason as the one explained in the issue description message.

@DamienCassou
Copy link
Author

I think that what I need is ordering between groups to specify which ones match more precisely in case of conflict. For example:

{
    groups: {
        "public-methods": [
            {
                name: "/^[^_].+/",
                type: "method",
                static: false,
                order: 2
            },
        ],
        "public-rendering-methods": [
            {
                name: "/^[^_].+render.+/",
                type: "method",
                static: false,
                order: 1
            },
        ]
    }
}

This means that, if a method matches "public-rendering-methods", then this method is not considered a member of "public-methods" because "public-rendering-methods" has a smaller order. Said differently, the order is used to sort the groups and the first one matching wins.

@DamienCassou
Copy link
Author

ping

@bryanrsmith
Copy link
Owner

Hi @DamienCassou, I'd be happy to review a PR if you know the change you'd like to make.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants