influxdata / telegraf

Agent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.
https://influxdata.com/telegraf
MIT License
14.21k stars 5.52k forks source link

New linter: `intrange`. Should we enable it? #15502

Closed zak-pawel closed 1 month ago

zak-pawel commented 1 month ago

Description

This issue starts a discussion about enabling:

It does not suggest updating loops which:

It works for integer literals, const/vars, and expressions that evaluate to an integer

Examples

Before:

    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }

After:

    for i := range 10 {
        fmt.Println(i)
    }

Before:

    for i := 0; i < 10; i++ {
        fmt.Println("Hello again!")
    }

After:

    for range 10 {
        fmt.Println("Hello again!")
    }

Expected output

Decision about enabling or not enabling this linter.

Findings

For this linter, the following findings were found in the current codebase:

config/deprecation.go:302:2                                                      intrange  for loop can be changed to use an integer range (Go 1.22+)
config/deprecation.go:313:4                                                      intrange  for loop can be changed to use an integer range (Go 1.22+)
config/envvar.go:80:2                                                            intrange  for loop can be changed to use an integer range (Go 1.22+)
config/envvar.go:126:2                                                           intrange  for loop can be changed to use an integer range (Go 1.22+)
config/envvar.go:175:2                                                           intrange  for loop can be changed to use an integer range (Go 1.22+)
internal/content_coding_test.go:205:3                                            intrange  for loop can be changed to use an integer range (Go 1.22+)
internal/internal.go:114:2                                                       intrange  for loop can be changed to use an integer range (Go 1.22+)
models/running_output.go:278:2                                                   intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/aggregators/quantile/quantile_test.go:88:2                               intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/aggregators/quantile/quantile_test.go:149:2                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/aggregators/quantile/quantile_test.go:220:2                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/aggregators/quantile/quantile_test.go:281:2                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/aggregators/quantile/quantile_test.go:352:2                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/aggregators/quantile/quantile_test.go:413:2                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/aggregators/quantile/quantile_test.go:444:2                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/aggregators/quantile/quantile_test.go:480:2                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/aggregators/quantile/quantile_test.go:498:2                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/aggregators/quantile/quantile_test.go:521:2                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/aggregators/quantile/quantile_test.go:557:2                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/aggregators/quantile/quantile_test.go:575:2                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/aggregators/quantile/quantile_test.go:598:2                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/aggregators/quantile/quantile_test.go:634:2                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/aggregators/quantile/quantile_test.go:652:2                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/common/parallel/ordered.go:67:2                                          intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/common/parallel/parallel_test.go:20:2                                    intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/common/parallel/parallel_test.go:51:2                                    intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/common/parallel/unordered.go:40:2                                        intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/common/proxy/socks5_test.go:47:2                                         intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/common/shim/processor_test.go:26:2                                       intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/common/socket/splitters.go:80:5                                          intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/common/starlark/field_dict.go:225:3                                      intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/aliyuncms/discovery.go:67:2                                       intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/burrow/burrow_test.go:92:2                                        intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/burrow/burrow_test.go:140:2                                       intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/burrow/burrow_test.go:175:2                                       intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/burrow/burrow_test.go:206:2                                       intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/couchbase/couchbase.go:89:2                                       intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/ctrlx_datalayer/ctrlx_datalayer.go:218:3                          intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/dpdk/dpdk_test.go:893:2                                           intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/example/example.go:93:2                                           intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/exec/exec_test.go:289:5                                           intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/exec/exec_test.go:296:5                                           intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/execd/shim/goshim.go:213:2                                        intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/file/file_test.go:378:4                                           intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/haproxy/haproxy_test.go:127:2                                     intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/hddtemp/go-hddtemp/hddtemp.go:45:2                                intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/http_listener_v2/http_listener_v2_test.go:499:4                   intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/influxdb_listener/influxdb_listener_benchmark_test.go:87:2        intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/influxdb_listener/influxdb_listener_benchmark_test.go:89:3        intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/influxdb_listener/influxdb_listener_benchmark_test.go:94:3        intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/influxdb_listener/influxdb_listener_test.go:613:4                 intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/influxdb_v2_listener/influxdb_v2_listener_benchmark_test.go:87:2  intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/influxdb_v2_listener/influxdb_v2_listener_benchmark_test.go:89:3  intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/influxdb_v2_listener/influxdb_v2_listener_benchmark_test.go:94:3  intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/influxdb_v2_listener/influxdb_v2_listener_test.go:453:4           intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/intel_rdt/intel_rdt.go:298:2                                      intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/interrupts/interrupts.go:57:3                                     intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/interrupts/interrupts.go:87:2                                     intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/jenkins/jenkins_test.go:356:5                                     intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/kafka_consumer/kafka_consumer_test.go:600:2                       intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/libvirt/libvirt_utils.go:88:2                                     intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/libvirt/libvirt_utils.go:90:3                                     intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/lustre2/lustre2_test.go:461:2                                     intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/modbus/configuration_register_test.go:932:2                       intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/modbus/configuration_register_test.go:1017:2                      intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/modbus/configuration_register_test.go:1074:2                      intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/modbus/modbus.go:372:2                                            intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/modbus/modbus_test.go:436:3                                       intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/modbus/modbus_test.go:459:4                                       intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/netflow/type_conversion.go:180:2                                  intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/p4runtime/p4runtime_test.go:278:3                                 intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/pgbouncer/pgbouncer.go:101:2                                      intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/postgresql/postgresql.go:121:2                                    intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/postgresql_extensible/postgresql_extensible.go:167:2              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/puppetagent/puppetagent.go:121:2                                  intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/puppetagent/puppetagent.go:125:3                                  intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/redis/redis.go:694:4                                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/redis/redis.go:712:4                                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/sflow/packetdecoder.go:104:2                                      intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/sflow/packetdecoder.go:237:2                                      intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/sql/sql_test.go:24:2                                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/sqlserver/sqlserver.go:381:2                                      intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/stackdriver/stackdriver.go:694:2                                  intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/statsd/statsd.go:369:2                                            intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/statsd/statsd.go:840:4                                            intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/statsd/statsd_test.go:204:4                                       intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/statsd/statsd_test.go:241:4                                       intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/statsd/statsd_test.go:278:4                                       intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/statsd/statsd_test.go:295:2                                       intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/statsd/statsd_test.go:2092:2                                      intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/tail/multiline.go:127:2                                           intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/vsphere/endpoint.go:593:3                                         intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/vsphere/vsphere_test.go:169:2                                     intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/vsphere/vsphere_test.go:195:2                                     intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/webhooks/webhooks.go:76:2                                         intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/zfs/zfs_linux.go:108:2                                            intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/zipkin/cmd/stress_test_write/stress_test_write.go:75:2            intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/zipkin/cmd/thrift_serialize/thrift_serialize.go:134:2             intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/inputs/zipkin/codec/thrift/thrift.go:30:2                                intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/cloudwatch/cloudwatch.go:238:2                                   intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/influxdb_v2/http_internal_test.go:60:4                           intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/kinesis/kinesis_test.go:489:2                                    intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/kinesis/kinesis_test.go:496:2                                    intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/kinesis/kinesis_test.go:595:2                                    intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/mqtt/mqtt_test.go:198:2                                          intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/mqtt/mqtt_test.go:350:2                                          intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/mqtt/mqtt_test.go:437:2                                          intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/opentelemetry/opentelemetry.go:184:3                             intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/opentsdb/opentsdb_test.go:132:2                                  intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/postgresql/postgresql.go:171:3                                   intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/postgresql/postgresql_bench_test.go:72:2                         intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/postgresql/postgresql_bench_test.go:74:3                         intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/postgresql/postgresql_bench_test.go:84:4                         intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/postgresql/postgresql_bench_test.go:93:5                         intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/postgresql/postgresql_test.go:898:2                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/postgresql/postgresql_test.go:902:3                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/sql/sql.go:180:3                                                 intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/sql/sql.go:185:3                                                 intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/sql/sql_test.go:45:2                                             intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/sumologic/sumologic_test.go:45:2                                 intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/timestream/timestream.go:228:2                                   intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/timestream/timestream.go:536:2                                   intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/zabbix/zabbix_test.go:746:2                                      intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/outputs/zabbix/zabbix_test.go:762:2                                      intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/parsers/grok/parser.go:433:2                                             intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/parsers/influx/influx_upstream/parser_test.go:959:4                      intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/parsers/influx/machine_test.go:1711:4                                    intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/parsers/influx/machine_test.go:1789:4                                    intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/parsers/influx/machine_test.go:2139:4                                    intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/parsers/influx/machine_test.go:2178:4                                    intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/parsers/influx/machine_test.go:2216:4                                    intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/parsers/influx/parser_test.go:926:4                                      intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/parsers/nagios/parser_test.go:84:2                                       intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/parsers/parquet/parser.go:57:2                                           intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/processors/execd/execd_test.go:51:2                                      intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/processors/execd/execd_test.go:88:2                                      intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/processors/ifname/ifname_test.go:124:2                                   intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/processors/reverse_dns/rdnscache.go:276:2                                intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/processors/starlark/starlark_test.go:3538:4                              intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/processors/strings/strings_test.go:1174:2                                intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/processors/unpivot/unpivot_test.go:236:2                                 intrange  for loop can be changed to use an integer range (Go 1.22+)
plugins/serializers/influx/reader_test.go:242:2                                  intrange  for loop can be changed to use an integer range (Go 1.22+)

Additional configuration

For this linter, no additional configuration can be provided.

powersj commented 1 month ago

Is there a performance benefit to making this change? It doesn't seem to make the code any easier to read.

Given that list of reasons not to update code, I don't want us to start needing to add in even more nolint statements for something as basic like a for loop. It also seems an unnecessary hurdle for contributors.

So leaning -1

zak-pawel commented 1 month ago

Is there a performance benefit to making this change?

I don't think so.

srebhan commented 1 month ago

Also -1 here if we don't see a clear benefit from the change. Both ways of coding it look good to me...

powersj commented 1 month ago

Closing as rejected