Function main
has a Cognitive Complexity of 284 (exceeds 20 allowed). Consider refactoring. Open
func main() {
// we want to load a config file named "irods_downloader_config.yaml" if it exists in WD or in ~/.config
viper.SetConfigName("irods_downloader_config")
viper.SetConfigType("yaml")
viper.AddConfigPath(".") // look for config in the working directory first
- Read upRead up
Cognitive Complexity
Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.
A method's cognitive complexity is based on a few simple rules:
- Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
- Code is considered more complex for each "break in the linear flow of the code"
- Code is considered more complex when "flow breaking structures are nested"
Further reading
Function main
has 566 lines of code (exceeds 50 allowed). Consider refactoring. Open
func main() {
// we want to load a config file named "irods_downloader_config.yaml" if it exists in WD or in ~/.config
viper.SetConfigName("irods_downloader_config")
viper.SetConfigType("yaml")
viper.AddConfigPath(".") // look for config in the working directory first
File irods_downloader.go
has 686 lines of code (exceeds 500 allowed). Consider refactoring. Open
package main
import (
"bytes"
"encoding/json"
Function main
has 8 return statements (exceeds 4 allowed). Open
func main() {
// we want to load a config file named "irods_downloader_config.yaml" if it exists in WD or in ~/.config
viper.SetConfigName("irods_downloader_config")
viper.SetConfigType("yaml")
viper.AddConfigPath(".") // look for config in the working directory first
Avoid deeply nested control flow statements. Open
if err != nil {
// Display everything we got if error.
log.Println("Error when running command. Output:")
log.Println(string(output))
log.Printf("Got command status: %s\n", err.Error())
2: cannot find package "github.com/spf13/viper" in any of: Open
"github.com/spf13/viper"
- Exclude checks
Similar blocks of code found in 2 locations. Consider refactoring. Open
func indexBam(cram_list []cram_file, i int, samtools_exec string) {
cram := &cram_list[i]
bam_filename := cram.Realigned_bam_path
output, err := exec.Command(samtools_exec, "index", bam_filename).CombinedOutput()
- Read upRead up
Duplicated Code
Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:
Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.
When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).
Tuning
This issue has a mass of 154.
We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.
The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.
If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.
See codeclimate-duplication
's documentation for more information about tuning the mass threshold in your .codeclimate.yml
.
Refactorings
- Extract Method
- Extract Class
- Form Template Method
- Introduce Null Object
- Pull Up Method
- Pull Up Field
- Substitute Algorithm
Further Reading
- Don't Repeat Yourself on the C2 Wiki
- Duplicated Code on SourceMaking
- Refactoring: Improving the Design of Existing Code by Martin Fowler. Duplicated Code, p76
Similar blocks of code found in 2 locations. Consider refactoring. Open
func quickcheck_alignments(cram_list []cram_file, i int, samtools_exec string) {
cram := &cram_list[i]
bam_filename := cram.Realigned_bam_path
output, err := exec.Command(samtools_exec, "quickcheck", bam_filename).CombinedOutput()
- Read upRead up
Duplicated Code
Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:
Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.
When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).
Tuning
This issue has a mass of 154.
We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.
The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.
If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.
See codeclimate-duplication
's documentation for more information about tuning the mass threshold in your .codeclimate.yml
.
Refactorings
- Extract Method
- Extract Class
- Form Template Method
- Introduce Null Object
- Pull Up Method
- Pull Up Field
- Substitute Algorithm
Further Reading
- Don't Repeat Yourself on the C2 Wiki
- Duplicated Code on SourceMaking
- Refactoring: Improving the Design of Existing Code by Martin Fowler. Duplicated Code, p76
don't use underscores in Go names; func parameter submitted_jobs_map should be submittedJobsMap Open
submitted_jobs_map map[string]string,
- Exclude checks
don't use underscores in Go names; func parameter attribute_name should be attributeName Open
attribute_name string,
- Exclude checks
don't use underscores in Go names; struct field Cram_dl_path should be CramDlPath Open
Cram_dl_path string
- Exclude checks
don't use underscores in Go names; var bwa_align_libraries should be bwaAlignLibraries Open
bwa_align_libraries := viper.GetStringSlice("bwa_align_libraries")
- Exclude checks
don't use underscores in Go names; var genome_annot should be genomeAnnot Open
genome_annot := viper.GetString("genome_annot")
- Exclude checks
don't use underscores in Go names; var sample_name should be sampleName Open
sample_name := ""
- Exclude checks
don't use underscores in Go names; var fq_filename should be fqFilename Open
fq_filename := strings.ReplaceAll(cram.Filename, ".cram", "")
- Exclude checks
don't use underscores in Go names; var rna_bams_featurecounts_input should be rnaBamsFeaturecountsInput Open
var rna_bams_featurecounts_input []string
- Exclude checks
don't use underscores in Go names; func parameter cram_list should be cramList Open
func writeCheckpoint(cram_list []cram_file, step int) {
- Exclude checks
don't use underscores in Go names; func parameter cram_list should be cramList Open
func quickcheck_alignments(cram_list []cram_file, i int, samtools_exec string) {
- Exclude checks
don't use underscores in Go names; func parameter samtools_exec should be samtoolsExec Open
func indexBam(cram_list []cram_file, i int, samtools_exec string) {
- Exclude checks
don't use underscores in Go names; struct field Realigned_bam_path should be RealignedBamPath Open
Realigned_bam_path string
- Exclude checks
don't use underscores in Go names; var imeta_file should be imetaFile Open
imeta_file, err := os.Create(cram.Imeta_path)
- Exclude checks
don't use underscores in Go names; var lib_type_dir should be libTypeDir Open
lib_type_dir := strings.ReplaceAll(cram.Library_type, " ", "_")
- Exclude checks
don't use underscores in Go names; var checkpoint_file should be checkpointFile Open
checkpoint_file := fmt.Sprintf("checkpoint_%d.json", step)
- Exclude checks
don't use underscores in Go names; func parameter cram_list should be cramList Open
cram_list *[]cram_file,
- Exclude checks
don't use underscores in Go names; var bjobs_output_filename should be bjobsOutputFilename Open
bjobs_output_filename := submitted_jobs_map[func_cram.Filename]
- Exclude checks
don't use underscores in Go names; struct field Imeta_downloaded should be ImetaDownloaded Open
Imeta_downloaded bool
- Exclude checks
don't use underscores in Go names; struct field Cram_is_phix should be CramIsPhix Open
Cram_is_phix bool
- Exclude checks
don't use underscores in Go names; struct field Fastq_2_path should be Fastq2Path Open
Fastq_2_path string
- Exclude checks
don't use underscores in Go names; struct field Fastq_extracted_success should be FastqExtractedSuccess Open
Fastq_extracted_success bool
- Exclude checks
don't use underscores in Go names; struct field Cram_download_success should be CramDownloadSuccess Open
Cram_download_success bool
- Exclude checks
don't use underscores in Go names; struct field Symlinked_fq_1 should be SymlinkedFq1 Open
Symlinked_fq_1 string
- Exclude checks
don't use underscores in Go names; struct field Imeta_parsed should be ImetaParsed Open
Imeta_parsed bool
- Exclude checks
don't use underscores in Go names; var bwa_ram should be bwaRAM Open
bwa_ram := viper.GetString("bwa_ram")
- Exclude checks
don't use underscores in Go names; struct field Realigned_quickcheck_success should be RealignedQuickcheckSuccess Open
Realigned_quickcheck_success bool
- Exclude checks
don't use underscores in Go names; var job_err should be jobErr Open
job_err := out_folder + "/D_realignement_RNA_" + cram.Sample_name + ".e"
- Exclude checks
don't use underscores in Go names; var cram_list should be cramList Open
var cram_list []cram_file
- Exclude checks
don't use underscores in Go names; var star_exec should be starExec Open
star_exec := viper.GetString("star_exec")
- Exclude checks
don't use underscores in Go names; var cram_exists_map should be cramExistsMap Open
cram_exists_map := make(map[string]string)
- Exclude checks
don't use underscores in Go names; var library_type should be libraryType Open
library_type := ""
- Exclude checks
don't use underscores in Go names; var attribute_with_sample_name should be attributeWithSampleName Open
attribute_with_sample_name := viper.GetString("attribute_with_sample_name")
- Exclude checks
don't use underscores in Go names; var realignment_map should be realignmentMap Open
realignment_map := make(map[string]string)
- Exclude checks
don't use underscores in Go names; var job_err should be jobErr Open
job_err := "E_Counts_matrix_RNA/featurecounts_run.e"
- Exclude checks
don't use underscores in Go names; var bam_filename should be bamFilename Open
bam_filename := cram.Realigned_bam_path
- Exclude checks
don't use underscores in Go names; var star_genome_dir should be starGenomeDir Open
star_genome_dir := viper.GetString("star_genome_dir")
- Exclude checks
don't use underscores in Go names; var sample_names_map should be sampleNamesMap Open
sample_names_map := make(map[string][]string)
- Exclude checks
don't use underscores in Go names; var out_folder should be outFolder Open
out_folder := "D_realignments/" + strings.ReplaceAll(cram.Library_type, " ", "_") + "/"
- Exclude checks
don't use underscores in Go names; var matrix_out should be matrixOut Open
matrix_out := "E_Counts_matrix_RNA/featurecounts_matrix.tsv"
- Exclude checks
don't use underscores in Go names; func quickcheck_alignments should be quickcheckAlignments Open
func quickcheck_alignments(cram_list []cram_file, i int, samtools_exec string) {
- Exclude checks
don't use underscores in Go names; var star_align_libraries should be starAlignLibraries Open
star_align_libraries := viper.GetStringSlice("star_align_libraries")
- Exclude checks
don't use underscores in Go names; var split_filename should be splitFilename Open
split_filename := strings.Split(filename, "_")
- Exclude checks
don't use underscores in Go names; var func_cram should be funcCram Open
func_cram := &((*cram_list)[i])
- Exclude checks
don't use underscores in Go names; func parameter samtools_exec should be samtoolsExec Open
func quickcheck_alignments(cram_list []cram_file, i int, samtools_exec string) {
- Exclude checks
don't use underscores in Go names; func parameter cram_list should be cramList Open
func indexBam(cram_list []cram_file, i int, samtools_exec string) {
- Exclude checks
don't use underscores in Go names; struct field File_exists_in_irods should be FileExistsInIrods Open
File_exists_in_irods bool
- Exclude checks
don't use underscores in Go names; var cram_dl_dir should be cramDlDir Open
cram_dl_dir := "A_iRODS_CRAM_Downloads/"
- Exclude checks
don't use underscores in Go names; var undownloaded_cram_map should be undownloadedCramMap Open
undownloaded_cram_map := make(map[string]string)
- Exclude checks
don't use underscores in Go names; var bam_filename should be bamFilename Open
bam_filename := cram.Realigned_bam_path
- Exclude checks
don't use underscores in Go names; var bwa_exec should be bwaExec Open
bwa_exec := viper.GetString("bwa_exec")
- Exclude checks
don't use underscores in Go names; var current_step should be currentStep Open
var current_step int
- Exclude checks
don't use underscores in Go names; var phix_status should be phixStatus Open
phix_status := false
- Exclude checks
don't use underscores in Go names; var split_imeta should be splitImeta Open
split_imeta := bytes.Split(imeta, []byte("----"))
- Exclude checks
don't use underscores in Go names; var line_split should be lineSplit Open
line_split := strings.Split(strings.TrimSuffix(string(line), "\n"), "\n")
- Exclude checks
don't use underscores in Go names; var job_out should be jobOut Open
job_out := out_folder + "/D_realignement_RNA_" + cram.Sample_name + ".o"
- Exclude checks
don't use underscores in Go names; struct field Sample_name should be SampleName Open
Sample_name string
- Exclude checks
don't use underscores in Go names; var star_ram should be starRAM Open
star_ram := viper.GetString("star_ram")
- Exclude checks
don't use underscores in Go names; var cram_list_len should be cramListLen Open
cram_list_len := len(cram_list)
- Exclude checks
don't use underscores in Go names; var line_split should be lineSplit Open
line_split := strings.Split(strings.TrimSuffix(string(line), "\n"), "\n")
- Exclude checks
don't use underscores in Go names; var job_out should be jobOut Open
job_out := "E_Counts_matrix_RNA/featurecounts_run.o"
- Exclude checks
don't use underscores in Go names; type cram_file should be cramFile Open
type cram_file struct {
- Exclude checks
don't use underscores in Go names; struct field Imeta_path should be ImetaPath Open
Imeta_path string
- Exclude checks
don't use underscores in Go names; struct field Realigned_succesful should be RealignedSuccesful Open
Realigned_succesful bool
- Exclude checks
don't use underscores in Go names; var bwa_genome_ref should be bwaGenomeRef Open
bwa_genome_ref := viper.GetString("bwa_genome_ref")
- Exclude checks
don't use underscores in Go names; var featurecounts_exec should be featurecountsExec Open
featurecounts_exec := viper.GetString("featurecounts_exec")
- Exclude checks
don't use underscores in Go names; var featurecounts_ram should be featurecountsRAM Open
featurecounts_ram := viper.GetString("featurecounts_ram")
- Exclude checks
don't use underscores in Go names; var fastq_cram_map should be fastqCramMap Open
fastq_cram_map := make(map[string]string)
- Exclude checks
don't use underscores in Go names; struct field Realigned_index_success should be RealignedIndexSuccess Open
Realigned_index_success bool
- Exclude checks
don't use underscores in Go names; var samtools_exec should be samtoolsExec Open
samtools_exec := viper.GetString("samtools_exec")
- Exclude checks
don't use underscores in Go names; var split_output should be splitOutput Open
split_output := bytes.Split(output, []byte("----"))
- Exclude checks
don't use underscores in Go names; var run_lane should be runLane Open
run_lane := strings.Split(split_filename[1], "#")[0] // this gets between _ and # which is lane
- Exclude checks
don't use underscores in Go names; struct field Irods_path should be IrodsPath Open
Irods_path string
- Exclude checks
var rankingsJson should be rankingsJSON Open
rankingsJson, _ := json.MarshalIndent(cram_list, "", " ")
- Exclude checks
don't use underscores in Go names; struct field Library_type should be LibraryType Open
Library_type string
- Exclude checks
don't use underscores in Go names; struct field Fastq_1_path should be Fastq1Path Open
Fastq_1_path string
- Exclude checks
don't use underscores in Go names; struct field Symlinked_fq_2 should be SymlinkedFq2 Open
Symlinked_fq_2 string
- Exclude checks
don't use underscores in Go names; var bam_output should be bamOutput Open
bam_output := out_folder + cram.Sample_name + ".bam"
- Exclude checks