@@ -125,6 +125,10 @@ func detectSpecialCases(ctx context.Context, fp string) (heartbeat.Language, boo
125125 return heartbeat .LanguageObjectiveCPP , true
126126 }
127127
128+ if ext == ".pas" && folderContainsDelphiFiles (ctx , dir ) {
129+ return heartbeat .LanguageDelphi , true
130+ }
131+
128132 return heartbeat .LanguageUnknown , false
129133}
130134
@@ -186,7 +190,7 @@ func folderContainsCFiles(ctx context.Context, dir string) bool {
186190 return false
187191}
188192
189- // folderContainsCFiles returns true, if filder contains c++ files.
193+ // folderContainsCPPFiles returns true, if filder contains c++ files.
190194func folderContainsCPPFiles (ctx context.Context , dir string ) bool {
191195 if dir == "" {
192196 return false
@@ -212,6 +216,32 @@ func folderContainsCPPFiles(ctx context.Context, dir string) bool {
212216 return false
213217}
214218
219+ // folderContainsDelphiFiles returns true, if filder contains Delphi files.
220+ func folderContainsDelphiFiles (ctx context.Context , dir string ) bool {
221+ if dir == "" {
222+ return false
223+ }
224+
225+ logger := log .Extract (ctx )
226+
227+ extensions , err := loadFolderExtensions (dir )
228+ if err != nil {
229+ logger .Warnf ("failed loading folder extensions: %s" , err )
230+ return false
231+ }
232+
233+ expectedExtensions := []string {".fmx" , ".dfm" , ".dproj" }
234+ for _ , ext := range expectedExtensions {
235+ for _ , e := range extensions {
236+ if e == ext {
237+ return true
238+ }
239+ }
240+ }
241+
242+ return false
243+ }
244+
215245// correspondingFileExists returns true if corresponding file with the provided extension exists.
216246// E.g. will return true, if called with "/tmp/file.go" and "txt" and /tmp/file.txt existis.
217247func correspondingFileExists (fp string , extension string ) bool {
0 commit comments