En iyi uygulamaları takip etmeyen bir açık kaynak kodlu projede kodlama tarzı değişiklikleri yapmak sorun olur mu?


38

Son zamanlarda, GitHub'da Rubocop gibi bir kod analiz aracıyla kontrol edildiğinde çok fazla suç oluşturan bir dizi açık kaynaklı Ruby (ya da çoğu Ruby idi) projelerine rastladım .

Şimdi, bu suçlara ait en fazla 80 karakter hattı uzunluğu kuralı aşan düzeyde kural başına 2 boşluklar aşağıdaki değildir, çift tırnak yerine tek tırnak (değil interpolasyon) kullanılarak ya da kullanımı gibi {ve }çok hatlı blokları için.

[] Ruby tarzı kılavuz, gerçek dünya Ruby programcılarının diğer gerçek dünya Ruby programcıları tarafından korunabilen kod yazabilmesi için en iyi uygulamaları önerir. ~ Kaynak: Ruby Style Guide

Her ne kadar küçük ve düzeltilmesi kolay olsalar da, açık kaynaklı bir projenin kodlama stilini, suçları düzelterek ve Çekme İsteği yaparak değiştirmek uygun mudur? Rails gibi bazı projelerin kozmetik değişiklikleri kabul etmediğini ve bazılarının aynı anda "düzeltmek" için çok büyük olduklarını kabul ediyorum (örneğin, Rao'lar Rubocop çalıştırıldığında 80.000'den fazla suç işliyor - ne olursa olsun, kendi küçük kodlama kümelerine sahipler) katkıda bulunurken uyulması gereken sözleşmeler ). Sonuçta, Ruby Style Guide , Rubocop gibi aletlerle birlikte bir sebep için orada.

İnsanlar tutarlılığı takdir ediyorlar, bu yüzden bu tür değişiklikler yapmak genel olarak Ruby topluluğu için iyi bir şey yapmak, değil mi?

[Ruby Style Guide'ın yazarı / yazarları] hiç bir yerde tüm kurallara uymuyordu - çoğunlukla profesyonel bir yazılım mühendisi olarak kariyerime, Ruby topluluğunun üyelerinden gelen geri bildirimlere ve önerilere dayanıyor. "Ruby 1.9 Programlama Dili" ve "Ruby 1.9 Programlama Dili" gibi Ruby programlama kaynaklarına saygı duymaktayız. ~ Kaynak: Ruby Style Guide

Topluluk kodlama tarzı sözleşmelerini ve en iyi uygulamaları takip etmiyor musunuz, temelde kötü uygulamaları teşvik ediyor ?


3
Benzer soru: Bir F sınıfını kod ikliminden yeniden yansıtmalı mıyım? , ancak mimarlığa daha fazla odaklanılarak.
amon


5
Bu tarz konuların çoğu, oldukça küçük tbh geliyor.
JL235


4
@MathewFoscarini hayır, sordukları şey, "bir radar silahı alırsam, yerel sürüş yasalarının ne olduğuna karar verebilir miyim?"
Jon Hanna,

Yanıtlar:


65

Bakıcılara sorun.

Kodlama stili oldukça öznel bir tartışma ve maksimum karakter uzunluğu 80 karakter gibi kurallar oldukça öznel - genel anlaşma, kısa satırların okunması daha iyi olsa da, 80 bugünün ekran boyutları ve IDE'leri ile bazıları için çok kısıtlayıcı olabilir.

Diğer kurallar da bilerek yoksayılabilir. Örneğin, bir geliştirici, küresel olarak çift tırnak kullanımının onun için daha iyi olduğunu düşünebilir ve kazara enterpolasyonun “riskini” ve ayrıştırma süresinde son derece küçük bir artışı kabul etmeye istekli olabilir.

Pek çok bakıcı, incelemeyi sıkıcı oldukları için büyük kodlama stili değişikliklerini de sevmez ve hatalara neden olma olasılığı vardır. Örneğin, bir dize kasıtlı bir enterpolasyon içermesine rağmen çift tırnak işareti kullanması gerekmesine rağmen tek bir alıntıya çevrilebilir. Bakıcılar, bu gerçek kod üzerinde çalışırken stil temizliği yapmayı tercih eder, böylece stil değişikliklerinin yeni hatalar ortaya koymadığını doğrulayabilirler.


34
Pek çok bakımcı da kesinlikle gerekli olmayan büyük değişiklikleri sevmez, çünkü kesinlikle gerekli olmayan birleştirme çatışmaları yaratma eğilimindedirler.
Jan Hudec,

4
Kaynak denetiminde açıklama işlevini (kod satırını oluşturan) kaybedersiniz, bir hata varsa, girildiği yeri suçlamak ve bu tür hataların daha fazla olup olmadığını izlemek zordur.
akran

4
Ek olarak - projeye özgü sözleşmeler tutarlıysa, kongre kontrol aracı için projeye özgü bir konfigürasyon oluşturabilir ve sözleşmeleri yapılandırma isteği olarak sunabilirsiniz. Böylece bakım sahipleri projelerini konfigürasyonlarını kullanarak kontrol edebilirler. (Kullandığınız araçla bunun mümkün olup olmadığını bilmiyorum.)
Peter Kofler

Birleştirme çatışmalarında +1. Sadece kodlama tarzı bir çalışmayı kabul ettim ve keşke olmasaydım, çünkü diğer insanların PR'larla birleşme çatışmalarına neden oldu.
Çözmesi

Kısa çizgili kodun değil, yan yana iki ayrı dosyanın yan yana gösterilmesine izin vermiyorsa, kısıtlayıcı olan IDE'dir.
unperson325680

48

Büyük ölçüde rubocop aracının yetkisine ve bakıcıların paylaşamayacağı Ruby Style Guide'a göre motive olmuş gibi görünüyorsunuz. Zaten kendi tarzlarına sahipler ve buna alışkınlar, bu yüzden herhangi bir değişiklik projede çalışan herkesi etkileyebilir ve özellikle proje büyükse, bu çok fazla iş gerektirir.

Bakımcıların motivasyonlarını göz önünde bulundurun. Onlar (muhtemelen) yeni kişilerin hata düzeltmeleri, hata raporları, çalışma kodu ve iyi yazılmış belgeler göndererek onlara katılmasını istiyorlar. Eğer ortaya çıkıp "Rubocop'te suçunuz var" derseniz, "Ah, iyi, yükü paylaşmaya yardımcı olacak yeni birini" düşünmeyeceklerdir, "Bu adam kim? Neden bize söylüyor? ne yapalım?".

Açık kaynaklı projeler meritokrasiye meyillidir: işinizin kalitesine bağlı olarak saygı görürsünüz. Sen geldin ve büyük işler ve yaparsanız o zaman stil endişeleri getirmek onlar hala hiçbir diyebilirsiniz rağmen, onlar, daha büyük olasılıkla dinlemek için vardır. "Konuşma ucuz, bana kodu göster" diyen açık bir kaynak var.


1
En iyi cevap. Çekme talebinde bulunurken daha önce gelenlerin çabalarına saygı göstermelisiniz. Proje stilini mevcut tüm geliştiricilerin ayaklarının altından değiştirmek, özellikle meritokraside sizden daha yüksek rütbeye sahip olan herkes, tanıttığınız yeni kuralları hatırlamalarını zorlaştırıyor. Bu, projeyi oldukları gibi sürdürme yeteneklerini incitir. Ayrıca, projenin geliştirilmesinde zaten aktif olsaydınız, muhtemelen bakımcının stilistik değişimler hakkındaki düşüncelerini ve projenin yaşam döngüsünde bunları tanıtmak için en iyi noktayı bileceksiniz.
Chris Keele

1
Kesinlikle. Örneğin, Linux projesi, yeni kod parçaları için oldukça katı bir stil rehberine sahip olmasına rağmen, stil sorunlarının giderilmesi için büyük bir çekme isteği göndermenize izin vermeyecektir, çünkü birleştirme ile uğraşmaktadır. Proje stil rehberine aykırı olsa bile, yerel stili korumanızı bile istiyor.
Miles Rout,

25

Her zaman Dogma üzerinden Pragmatizm. Kodlama stili kılavuzları, mimari kaygılardan, tek / çift alıntılama gibi anlamsız saçmalıklara dikkat çeken özellikle sinsi bir kötülük biçimidir. Kendinize sorun: Gerçekten bir fark yaratır mı?

Bir noktaya kadar iyi olabilirler, ama onlara neredeyse dindar bir hürmetle muamele ettiğiniz an, çok ileri gittiniz. Bunlar kurallar, öneriler, görüşler, gerçekler değil.

Öyleyse göz ardı edilmeli mi? Hayır, neye bakılması gerektiğine dair genel bir fikir edinmek için araçları kullanmanın yararı var, ama artık yok.

Genç türlerin ne sıklıkta gerçeği kafayla karıştırdığını merak ediyorum.


11
Yeniden biçimlendirme değişikliklerinin çoğu bakımcının sadece bunun için yeniden biçimlendirmekten nefret etmesinin çok iyi bir nedeni olan birleştirme çatışmaları yaratma eğiliminde olduğunu eklemeye değer.
Jan Hudec

13

Bu değişiklikleri yalnızca biçimlendirmeyi düzeltmek için açık bir sorun varsa çekebilirsiniz. Aksi halde, kendi şubenizi başlatın ve yazar, şubenizi sadece okunabilir olduğu için daha fazla insan kullandığını görürse. Şubede kendi başlarına birleşeceklerdir, ancak güncellemeleri birleştirip sürekli biçimlendirmeyi sabitleyerek şubenizi korumaya hazır olun.

Eğer proje kendi şubenizi sürdürmeye devam edecek kadar önemli değilse, ilk başta temizlik yapmaya değmezdi.

Çekme talepleri yazar tarafından kişisel olarak alınabilir. Bu, eleştiriyi önerme mekanizması değildir ve tüm kuralları yeniden biçimlendirmek eleştiri olarak alınabilir.

Kendi şubenizi korumak istemiyorsanız ancak bir projeye katkıda bulunmak istiyorsunuz. Yeni bir sayı açın ve mevcut formatın neden size neden konuştuğunu açıklayın, ardından sorunu yazara göre çözmeyi teklif edin. Yazar kabul ederse, sorunu size atar ve şimdi bir çekme isteği yapma izniniz vardır.

GitHub'ta da yaygın bir sorun olduğunu kabul ettiğim bir konuya dokundunuz . Bir kenara biçimlendirme, yanlış açıklamalar kullanan ve birçok IDE ile tahribata neden olan birkaç proje vardır . IDE'mde uyarı mesajlarını yayan ve yanlış kullanılan bayrakları yanlış kullanan üç popüler projeyi düşünebilirim. Onları düzeltmek için çekme istekleri gönderdim, ancak yazarlar aynı IDE'yi kullanmıyor, bu nedenle çekme istekleri yok sayılıyor.

Dallanma, birleştirme ve sabitleme tek çözüm gibi görünüyor.


Sizce, gelecekteki katkıda bulunanların yararlarını Çekme Talebi tespit suçları için geçerli bir "bahane" olarak değerlendirir misiniz? Örneğin, gelecekteki katkıda bulunanların kodlama stilini kavramak için tüm kod tabanına bakmak konusunda endişelenmelerine gerek kalmaz.
raf

@RafalChmiel Bir yazar bir çekme isteğini kabul ettiğinde, bu çekme işlemini gönderen kişi depoya eklenir ve kamuoyuna projeye katkıda bulunan olarak listelenir ve katkıda bulunan olarak listelenir. Bir çekme isteğini incelerken, yazar bunu kabul etmeye karar verirken bunu aklında tutar. Çekme istekleri gönderirken bunu aklınızda bulundurun. Katkıda bulunmaya layık şeyler yapın.
Tepki

Demek istediğim, suç işçilerini düzeltmekle gelecekteki katkıda bulunanlardan faydalanmak , halkla ilişkilerin böyle düzeltmelerle birleştirilmesi için geçerli bir neden olabilir miydi? Bakıcı neden bu PR'ı birleştirmeli? Belki de sorumun ifadesi biraz kapalıydı.
raf

2
@RafalChmiel Sebep olarak belirttiğiniz her şey sadece sizin fikrinizdir. Eğer boğaya benzeyen rahatsız edici bir kodsa, korkularını bir meseleye yaz. Yazar böyle bir çekime karşı savunursa, gözyaşlarınızı bir mendil ile silin.
Tepki

10

Alındığı Rubocop sitenin kendisi (vurgu benim):

Bir şey beni her zaman Ruby geliştiricisi olarak rahatsız etti - Python geliştiricileri harika bir programlama stili referansına (PEP-8) sahipler ve Ruby kodlama stilini ve en iyi uygulamaları belgeleyen resmi bir rehberimiz olmadı .

Lütfen anlayın:

Resmi Yakut Stili Kılavuzu yok

Stil rehberlerinin kötü olduğunu söylemiyorum. Ancak yalnızca resmi bir rehber yok, aynı zamanda bir stil rehberine sahip olmak kişisel, proje, takım ve şirket düzeyinde yapılmış bir seçimdir. Stil rehberleri, psikoloji terimini kullanmak için "grup içi sosyal norm" dır.

Bunun sizin için anlamı nedir? Eğer grubun bir parçası olarak kabul edilmediyseniz, bu sizin veya başka bir web sitesinin söylediği herhangi bir şeyin, gruba bağlı kalmayacak bir ihtimal olduğu anlamına gelir. Bu nedenle, söz konusu projeye aktif ve saygın bir katkıda bulunmazsanız, önerileriniz dikkate alınmayacak veya en iyi ihtimalle bir stil rehberine ilişkin önceki düşüncelerin bir hatırlatıcısı olacaktır. En kötüsü hakaret, ya da burnunu ait olmadığı yere sokan bir interloper veya bisikletçi olarak alınacak .

Sadece bir Stil Rehberi öneremez misin?

Eğer stil kılavuzları, son derece değer tutarlılık değerine inanıyoruz ve istiyorum: Aslında, bu size ne yapmak istediğinizi gibi görünüyor evangelize birleşik tarzı kurallarına bağlılığı için.

Bu iyi, ne kadar açık olduğun ve ne yapmak istediğin ve başarmak istediğin şey olduğu sürece. Belirli bir Tarz Rehberine inanıyorsanız ve Onun Bir Doğru Tarz Rehberi olduğuna inanıyorsanız veya en azından bu kanunsuz cennetler pratik yapmak için harcadığınız her neyse daha iyi, o zaman da sorun değil.

Ancak insanların takdir etmediği şey, davranışlarının meşru bir otorite olarak görmedikleri bir kaynaktan gelen gayri resmi, bağlayıcı olmayan, büyük ölçüde keyfi kurallara uymadığı söyleniyor. Eğer yapmak için yola yoksa sadece eğer sen ne budur zaman algılanan siz "mızraklar ve büyük bir kaynama pot kızgın yerlileri" daha az "kırmızı halı tedavi" nin olsun ve edeceğiz yapıyor tedavisi.


3

Burada alternatif bir fikir sunmak için, çoğu durumda, böyle bir değişiklik memnuniyetle karşılanacaktır. Açık kaynak projeleri birçok yazara sahip olma eğilimindedir. Genellikle "kodlama stili" yoktur; Bu tarz sadece söz konusu kodu yazan kişi kullanmakta olan şeydir. Bir dosya diğerinden farklı bir kişi tarafından yazılmışsa, stil de farklı olabilir. Konsensüs tarzı olan projelerde bile, bu tarzı düzenli olarak kontrol etmedikleri sürece, sıklıkla kullanılmaz.

Benim tecrübeme göre buna yaygın bir örnek, birisinin nispeten düşük kaliteli bir tarzdaki çekme isteği yoluyla bazı kodlara katkıda bulunmasıdır. Ancak, kod işe yarayabilir. Farklı insanlar bu konuda farklı görüşlere sahip. Bazı insanlar, tarz iyi olmadığı sürece çekme talebini birleştirmeyi reddedecek. Bazı insanlar kod çalıştığı sürece umursamıyor. Bazı insanlar iyi bir tarza sahip olmayı tercih ediyorlar, ancak katkıda bulunanları bir sürü "burada beyazlığı düzelt" yorumlarıyla korkutmak istemiyorlar (bu yorumları yaparken şahsen bu yorumları yaparken kendimi suçlu hissediyorum. Kod temeli iyi, çünkü katkısını korkutmuş gibi hissediyordur).

Bu yüzden, gördüğünüz tarzın projenin istediği tarz olduğunu varsaymayın. Aslında, genel olarak açık kaynağa katkıda bulunmak genelleştirilebilir: Açık kaynak kodlu bir projenin sahip olduğu kodun istediği kod olduğunu varsaymayın .

Yine de bazı şeylerin farkında olmalısınız:

  • Bazı insanlar stil konusunda dindardır. Eğer onların tomurcuklanmak istemedikleri ortaya çıkarsa, o zaman zahmet etme.

  • Bu büyük bir bisiklet sorunu. Herkes ve erkek kardeşinin bu şeyler hakkında bir fikri var. Böyle bir çekme isteğinin birleştirilmesi, bu nedenle zor olabilir.

  • Bu tür bir çekme isteğinin birleştirilmesi zor olabilir, çünkü çok hızlı bir şekilde birleştirme çatışmaları elde edilir; Temel olarak, değiştirdiğiniz kod tabanının herhangi bir parçası, önemsiz yollarla olsa bile, değişiklik yapar.

"İlk sor" yaklaşımına sadık kaldım. Açıklarsa ve tamamlama için çekme isteğine bağlı kalmaya istekli olursanız, o zaman devam edin.


2

Eskiden iyi bir stil rehberim olması konusunda büyüktü, ancak Ruby'de "Ben taşındım" durumunun durumu göz önüne alındığında.

Temelde birlikte çalıştığım şeyle yaşıyorum ve bir çok işten öğrendiğim genel sözleşmeleri takip ediyorum.

Seçtiğim dil olan Ruby için (kafamda) tarzı evrensel olarak kabul edilmiş, genel olarak kabul edilmiş, tercihlerime ve en iyi uygulamalara böldüm. Evrensel olarak kabul edilen şeyler Bir sorun veya özellik dalı talebi için değişiklik isteğinin bir parçası olarak değişiklik gönderebilirim.

Her stilin örnekleri (bence):

Ruby için evrensel olarak kabul edildi:

  • sekmeler değil boşluklar
  • iki boşluk girintisi
  • method_names_use_underscores
  • Sabitler Caps ile başlar.

Genel olarak kabul edilmiş:

  • Gerekmiyorsa parantez kullanmayın
  • { }Tek satırlı bloklar ve do endçok satırlı bloklar için kullanın .
  • CONSTANTS_ARE_IN_ALL_CAPS
  • İfade 1 satıra sığarsa öngörücü ifadeleri ( cond ? true : false) kullanın if then.

Kişisel tercihler:

  • 120 karakterlik çizgi uzunluğu
  • case whenifadeleri case ifadesinden 2 girintilidir.
  • Çift gerekmedikçe tek tırnak kullanın.

Anlaşma yok:

  • Vaka İfadeleri
  • Çizgi uzunluğu

En İyi Uygulamalar:

  • küçük yöntemler, <= 5 mümkünse satır.
  • küçük sınıflar, <= 100 mümkünse satır.
  • Sabitlerden kaçının
  • Kodda testler var

Sonunda, diğerleri ayrıntılı olarak, önce sen sormalısın. Günün sonunda, stilin anahtarı geliştiriciler arasındaki iletişim ve başkalarına karşı duyarlılıktır. Örneğin, açık kaynaklı bir projede stil değişikliği yapmak istersem, ilk önce bir veya iki gerçek özellik veya hata düzeltmesi için genellikle bir çekme isteği yapacağım. Sürdürücü beni biliyor ve ben katkıda ettik görür sonra, o zaman ben tarzı değişiklikleri önerebilir. Onlara sadece öneririm . Örneğin, "x projesinde başka bir özellik yaparken, birkaç dosyada 4 boşluk girintiniz olduğunu ve bunları 2 olarak değiştirip değiştiremeyeceğimi merak ediyordum."


1

Her ne kadar küçük ve düzeltilmesi kolay olsalar da, bir açık kaynak projesinin kodlama stilini, suçları düzelterek ve Çekme İsteği yaparak değiştirmenin uygun olduğunu düşünüyor musunuz?

Kısacası hayır!

Elbette, burada bunların sadece stil meseleleri olduğunu ve gerçek hatalar olmadığını varsayıyorum - ikincisi için çekme talepleri her zaman mantıklı olur (IMO). Ayrıca projeye yabancı olduğunuzu varsayıyorum ve Zaten bakımını yapan insanlarla temas halinde değil.

Ancak, herhangi bir dilde, stil rehberinden farklı, tercihleri ​​daha iyi veya daha kötüsü için farklı olan ve tanımadığınız insanlar üzerindeki bu stil değişikliklerini ve parçası olmadığınız bir projeyi zorlamaya çalışan insanlar vardır. arasında başka bir şey olabilir biraz olarak karşıdan karşıya gelirse kaba. Sonuçta - istek kabul edilirse (gerçekte) ne elde ediyorsunuz? Her ihtimalde, eğer bir projenin üyeleri tarzı farklı bir şeyle değiştirmek isteselerdi, çoktan yapmışlardı - ve bu istekle yapacağınız tek şey, üzerinde daha iyi çalışmayan bir tarzı zorlamaktır. mevcut üyeler için.

Bu, projeye stil "düzeltmeleri" dışında başka yollarla katkıda bulunmaya istekli olmanız durumunda hafifçe değişir. Projede nasıl çalışmak istediğinizi ancak standart dışı bir stil bulmakta zorlandığınız konusunda bakıcılarla bir diyalog açmak istiyorsanız, o zaman sorun değil. Ama ben sadece sadece stil değişiklikleri içeren bir sürü proje için gerçekten kör bir şekilde çekme istekleri yaratmaya doya doya doyamayacağım!


1

HERHANGİ bir değişiklik, kodun tipografik biçimlendirmesini değiştirirken bile hataları ortaya koymakla yükümlüdür.
Bu nedenle, geçerli bir işletme durumu olmadıkça kodda hiçbir değişiklik yapılmamalıdır ve "ancak kod hoş görünmüyor" veya "kod, kodlama standartlarına uymuyor" geçerli bir iş durumu değildir. Risk sadece çok büyük.
Şimdi, yine de bir kaynak dosyada büyük değişiklikler yapıyorsanız, dosyanın tamamını standartlara uygun şekilde çekmek kabul edilebilir olabilir, ancak büyük olasılıkla küçük değişiklikler yapacaksınız; bu durumda kendi değişikliklerinizi yapmanız neredeyse evrensel olarak tercih edilir. mevcut kodun kodlama standartlarına uymamasına rağmen, mevcut kodla aynı çizgiyi kullanın.
Heck, kod bir kod oluşturucunun sonucu olabilir ve zaman zaman yenilenebilir. Kod jeneratörleri, çirkin kod üretme konusunda ünlüydü ...


1

Orta derecede başarılı bir kaç .NET projem var ve ReSharper ve StyleCop ile koddan geçen ve bir sürü şeyi "düzelten" görünen kişilerden birkaç PR aldım. Bu PR'leri kabul etmiyorum, birkaç nedenden dolayı:

  • Değişikliklerin çoğu daha iyisi için olsa da, bazıları kodu bir şekilde olumsuz yönde etkiliyor, genellikle performans ve iyi kısımların kirazlı toplanması çok zor bir iş.
  • Tüm değişiklikler iyi huylu veya faydalı olsa bile, her dosyada her değişiklikteki her değişiklik incelenmeli ve yine çok uzun sürüyor.

Bu, eğer herhangi biri daha iyi bir hata kontrolü veya doktor yorumu eklemek isterse, bu PR'ı bir kalp atışıyla kabul edeceğimi söyledi.


-1

Bakım yapanların bu kodlama stili ihlallerini bir kusur olarak kabul edip etmediğini veya projenin kodlama stili için farklı bir standarda sahip olup olmadığını öğrenmeniz gerekir.

Farklı bir standarda sahipse, belgelenmesine veya resmileştirilmesine yardımcı olmayı önerebilirsiniz. O zaman bu tarzın bazı ihlalleri olduğu ortaya çıkabilir ve bunları düzeltebilirsiniz.


bu, bundan birkaç saat önce gönderilen başka bir cevapta değerli bir şey sunmuyor gibi görünüyor
gnat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.