Skip to content
This repository was archived by the owner on Oct 9, 2021. It is now read-only.

Commit 12cd40a

Browse files
committed
Improve C vs C++ vs Objective-C language detection
1 parent 7192099 commit 12cd40a

7 files changed

Lines changed: 19 additions & 7 deletions

File tree

tests/samples/codefiles/c_and_cpp/cpp.h

Whitespace-only changes.

tests/samples/codefiles/c_and_cpp/objective-c.h

Whitespace-only changes.

tests/samples/codefiles/c_and_cpp/objective-c.m

Whitespace-only changes.

tests/samples/codefiles/c_and_cpp/objective-cpp.h

Whitespace-only changes.

tests/samples/codefiles/c_and_cpp/objective-cpp.mm

Whitespace-only changes.

tests/test_languages.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def test_c_language_detected_for_header_with_c_files_in_folder(self):
6565
def test_cpp_language_detected_for_header_with_c_and_cpp_files_in_folder(self):
6666
self.shared(
6767
expected_language='C++',
68-
entity='c_and_cpp/empty.h',
68+
entity='c_and_cpp/cpp.h',
6969
)
7070

7171
def test_c_not_detected_for_non_header_with_c_files_in_folder(self):
@@ -80,12 +80,24 @@ def test_objectivec_language_detected_when_header_files_in_folder(self):
8080
entity='c_and_cpp/empty.m',
8181
)
8282

83+
def test_objectivec_language_detected_when_m_files_in_folder(self):
84+
self.shared(
85+
expected_language='Objective-C',
86+
entity='c_and_cpp/objective-c.h',
87+
)
88+
8389
def test_objectivecpp_language_detected_when_header_files_in_folder(self):
8490
self.shared(
8591
expected_language='Objective-C++',
8692
entity='c_and_cpp/empty.mm',
8793
)
8894

95+
def test_objectivecpp_language_detected_when_m_files_in_folder(self):
96+
self.shared(
97+
expected_language='Objective-C++',
98+
entity='c_and_cpp/objective-cpp.h',
99+
)
100+
89101
def test_guess_language(self):
90102
with utils.mock.patch('wakatime.stats.smart_guess_lexer') as mock_guess_lexer:
91103
mock_guess_lexer.return_value = None

wakatime/stats.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -177,18 +177,18 @@ def get_language_from_extension(file_name):
177177
if os.path.exists(u('{0}{1}').format(u(filepart), u('.c'))) or os.path.exists(u('{0}{1}').format(u(filepart), u('.C'))):
178178
return 'C'
179179

180-
available_extensions = extensions_in_same_folder(file_name)
181-
if '.cpp' in available_extensions:
182-
return 'C++'
183-
if '.c' in available_extensions:
184-
return 'C'
185-
186180
if os.path.exists(u('{0}{1}').format(u(filepart), u('.m'))) or os.path.exists(u('{0}{1}').format(u(filepart), u('.M'))):
187181
return 'Objective-C'
188182

189183
if os.path.exists(u('{0}{1}').format(u(filepart), u('.mm'))) or os.path.exists(u('{0}{1}').format(u(filepart), u('.MM'))):
190184
return 'Objective-C++'
191185

186+
available_extensions = extensions_in_same_folder(file_name)
187+
if '.cpp' in available_extensions:
188+
return 'C++'
189+
if '.c' in available_extensions:
190+
return 'C'
191+
192192
if re.match(r'\.m$', extension, re.IGNORECASE) and (os.path.exists(u('{0}{1}').format(u(filepart), u('.h'))) or os.path.exists(u('{0}{1}').format(u(filepart), u('.H')))):
193193
return 'Objective-C'
194194

0 commit comments

Comments
 (0)