Estou tentando combinar dois padrões de texto diferentes em um único arquivo e combinar seus resultados. Especificamente, tenho código-fonte cuja estrutura desejo entender mapeando eventos para seus manipuladores, por exemplo:
@EventHandler(MyEvent)
class MyHandler {
...
para que o resultado seja MyEvent -> MyHandler
. Isso é bastante fácil de fazer com algo como (?<=@EventHandler\()[^)]+\)\n.+?Handler
. No entanto, pode haver vários eventos:
@EventHandler(MyEvent, MyOtherEvent)
class MyHandler {
...
que também pode ser dividido em várias linhas:
@EventHandler(
MyEvent,
MyOtherEvent,
)
class MyHandler {
...
Os dois últimos exemplos devem render
MyEvent -> MyHandler
MyOtherEvent -> MyHandler
E embora eu consiga correspondências como esta:
MyEvent,
MyOtherEvent,
)
class MyHandler
Não sei como combinar as duas partes.
Se isso não for sensato apenas com expressões regulares, estou aberto para outras soluções, mas preferiria ferramentas CLI. A coisa "correta" pode ser usar o mecanismo de reflexão da linguagem de programação, mas não acho que precise de tanta complexidade. Você pode assumir que todos os nomes de eventos terminam em Event
, todos os nomes de manipuladores terminam em Handler
e as definições de anotação e classe seguem diretamente umas às outras.
Você pode fazer algo como: