From f2fb7b0961c886f56b74f5b36d57235674e17d43 Mon Sep 17 00:00:00 2001 From: yushan Date: Tue, 19 Aug 2025 23:45:42 +0000 Subject: [PATCH 1/2] Add directive to ignore python file rules --- gazelle/python/configure.go | 3 +++ gazelle/python/generate.go | 17 +++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/gazelle/python/configure.go b/gazelle/python/configure.go index 13ba6477cd..b9de78fff7 100644 --- a/gazelle/python/configure.go +++ b/gazelle/python/configure.go @@ -73,6 +73,7 @@ func (py *Configurer) KnownDirectives() []string { pythonconfig.ExperimentalAllowRelativeImports, pythonconfig.GenerateProto, pythonconfig.PythonResolveSiblingImports, + pythonconfig.PythonIgnoreTarget, } } @@ -254,6 +255,8 @@ func (py *Configurer) Configure(c *config.Config, rel string, f *rule.File) { log.Fatal(err) } config.SetResolveSiblingImports(v) + case pythonconfig.PythonIgnoreTarget: + config.AddIgnoreTarget(strings.TrimSpace(d.Value)) } } diff --git a/gazelle/python/generate.go b/gazelle/python/generate.go index a180ec527d..6b8912102e 100644 --- a/gazelle/python/generate.go +++ b/gazelle/python/generate.go @@ -132,11 +132,21 @@ func (py *Python) GenerateRules(args language.GenerateArgs) language.GenerateRes } } } + // filter out targets that are ignored + otherFileRules := make([]*rule.Rule, 0) + if args.File != nil { + for _, target := range args.File.Rules { + if cfg.IgnoreTarget(target.Name()) { + continue + } + otherFileRules = append(otherFileRules, target) + } + } // If a __test__.py file was not found on disk, search for targets that are // named __test__. if !hasPyTestEntryPointFile && args.File != nil { - for _, rule := range args.File.Rules { + for _, rule := range otherFileRules { if rule.Name() == pyTestEntrypointTargetname { hasPyTestEntryPointTarget = true break @@ -279,7 +289,7 @@ func (py *Python) GenerateRules(args language.GenerateArgs) language.GenerateRes return } generateEmptyLibrary := false - for _, r := range args.File.Rules { + for _, r := range otherFileRules { if r.Kind() == actualPyLibraryKind && r.Name() == pyLibraryTargetName { generateEmptyLibrary = true } @@ -585,6 +595,9 @@ func generateProtoLibraries(args language.GenerateArgs, cfg *pythonconfig.Config pyProtoRulesForProto := map[string]string{} if args.File != nil { for _, r := range args.File.Rules { + if cfg.IgnoreTarget(r.Name()) { + continue + } if r.Kind() == "py_proto_library" { pyProtoRules[r.Name()] = false From f7969ddd7844dd057812b52c8f7c1cccb8701af1 Mon Sep 17 00:00:00 2001 From: yushan Date: Tue, 19 Aug 2025 23:49:18 +0000 Subject: [PATCH 2/2] update --- gazelle/python/generate.go | 2 +- gazelle/pythonconfig/pythonconfig.go | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/gazelle/python/generate.go b/gazelle/python/generate.go index 6b8912102e..423a855ef1 100644 --- a/gazelle/python/generate.go +++ b/gazelle/python/generate.go @@ -133,7 +133,7 @@ func (py *Python) GenerateRules(args language.GenerateArgs) language.GenerateRes } } // filter out targets that are ignored - otherFileRules := make([]*rule.Rule, 0) + var otherFileRules []*rule.Rule if args.File != nil { for _, target := range args.File.Rules { if cfg.IgnoreTarget(target.Name()) { diff --git a/gazelle/pythonconfig/pythonconfig.go b/gazelle/pythonconfig/pythonconfig.go index ed9b914e82..ee7a942a48 100644 --- a/gazelle/pythonconfig/pythonconfig.go +++ b/gazelle/pythonconfig/pythonconfig.go @@ -112,6 +112,8 @@ const ( // like "import a" can be resolved to sibling modules. When disabled, they // can only be resolved as an absolute import. PythonResolveSiblingImports = "python_resolve_sibling_imports" + // PythonIgnoreTarget represents the directive that controls whether to ignore the specific target. + PythonIgnoreTarget = "python_ignore_target" ) // GenerationModeType represents one of the generation modes for the Python @@ -204,6 +206,7 @@ type Config struct { generatePyiDeps bool generateProto bool resolveSiblingImports bool + ignoredTargets map[string]struct{} } type LabelNormalizationType int @@ -244,6 +247,7 @@ func New( generatePyiDeps: false, generateProto: false, resolveSiblingImports: false, + ignoredTargets: make(map[string]struct{}), } } @@ -281,6 +285,7 @@ func (c *Config) NewChild() *Config { generatePyiDeps: c.generatePyiDeps, generateProto: c.generateProto, resolveSiblingImports: c.resolveSiblingImports, + ignoredTargets: make(map[string]struct{}), } } @@ -610,6 +615,17 @@ func (c *Config) ResolveSiblingImports() bool { return c.resolveSiblingImports } +// SetIgnoreTarget sets the target to be ignored. +func (c *Config) AddIgnoreTarget(target string) { + c.ignoredTargets[target] = struct{}{} +} + +// IgnoreTarget returns whether the target should be ignored. +func (c *Config) IgnoreTarget(target string) bool { + _, ignores := c.ignoredTargets[target] + return ignores +} + // FormatThirdPartyDependency returns a label to a third-party dependency performing all formating and normalization. func (c *Config) FormatThirdPartyDependency(repositoryName string, distributionName string) label.Label { conventionalDistributionName := strings.ReplaceAll(c.labelConvention, distributionNameLabelConventionSubstitution, distributionName)