mirror of
https://github.com/abhigyanpatwari/GitNexus.git
synced 2026-10-01 02:01:24 +00:00
* docs: add Objective-C fork provider notes * feat(objective-c): add deterministic provider and grammar * feat(objective-c): finalize provider MVP * fix(objective-c): harden provider integration * fix(objective-c): normalize bare macro markers * docs(objective-c): integrate provider documentation * fix(objective-c): harden resolution and header classification * fix(objective-c): complete provider follow-ups * fix: address Objective-C review follow-ups * chore: format Objective-C grammar sources * fix(objective-c): harden review follow-ups * Address PR review feedback (#3179) Keep Objective-C chunking and macro recovery aligned with the grammar, and stop Community MEMBER_OF edges from leaking into symbol context. Co-authored-by: Cursor <cursoragent@cursor.com> * Address follow-up review on ObjC chunking and language fallback. Keep preprocessor directive text from changing file-scope brace depth, group real ivar nodes, skip header modifiers, and restore Rakefile/Gemfile detection through getLanguageFromFilename. Co-authored-by: Cursor <cursoragent@cursor.com> * Parse Objective-C headers with the objc grammar in embeddings. ensureAndParse and structural extraction now use the same content classifier as ingest, including method snippets from .h files, so Protocol/Category/Class chunks are not re-parsed as C++. Co-authored-by: Cursor <cursoragent@cursor.com> * Address PR review feedback (#3179) Keep file-scope macro elision off C line splices and @interface/@protocol/@implementation bodies, and attach ivar attributes to the following instance variable when chunking. Co-authored-by: Cursor <cursoragent@cursor.com> * chore(bench): rebaseline Objective-C CSV emit * feat(objective-c): add workspace resolution and linear emit benches Plain .h files are classified as C++, so the ObjC pass could not resolve #import of those headers. Load a C/C#-style workspace once per pass, and keep protocol-candidate USES linear. Refs #3179 Co-authored-by: Cursor <cursoragent@cursor.com> * Address PR review feedback (#3179) - Compare LadybugDB labels() as a scalar when excluding Community MEMBER_OF edges. - Walk superclass members, skip file-static C sibling defs, and ignore comments in ObjC header/macro scans. Note: pre-existing failure in objective-c-provider integration (worker-pool ready timeout) not addressed by this PR. Co-authored-by: Cursor <cursoragent@cursor.com> * Address PR review feedback (#3179) Emit Objective-C declaration captures so compilation-unit siblings can share header/implementation bindings, and keep class vs protocol visibility groups distinct. Note: pre-existing failure in worker-pool startup (GITNEXUS_WORKER_READY_TIMEOUT_MS) not addressed by this PR. Co-authored-by: Cursor <cursoragent@cursor.com> * Address PR review feedback (#3179) Emit every comma-separated property/ivar declarator, and count @interface after a multiline block comment closes so in-declaration macros stay intact. Note: pre-existing failure in worker-pool startup (GITNEXUS_WORKER_READY_TIMEOUT_MS) not addressed by this PR. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: ximengkai <ximengkai@soyoung.com> Co-authored-by: Gergő Magyar <gergomagyar@icloud.com> Co-authored-by: Gergo Magyar <gergomagyar0@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com>
70 lines
2.6 KiB
TypeScript
70 lines
2.6 KiB
TypeScript
import { afterEach, describe, expect, it } from 'vitest';
|
|
import fs from 'node:fs/promises';
|
|
import os from 'node:os';
|
|
import path from 'node:path';
|
|
import { SupportedLanguages } from 'gitnexus-shared';
|
|
import { classifyContentLanguages } from '../../src/core/ingestion/content-language-classification.js';
|
|
import { getLanguageForFileContent } from '../../src/core/ingestion/languages/index.js';
|
|
|
|
describe('content language classification', () => {
|
|
let repoDir = '';
|
|
|
|
afterEach(async () => {
|
|
if (repoDir) await fs.rm(repoDir, { recursive: true, force: true });
|
|
});
|
|
|
|
it('retains only reusable language decisions and skips unreadable files', async () => {
|
|
repoDir = await fs.mkdtemp(path.join(os.tmpdir(), 'content-language-classification-'));
|
|
await fs.writeFile(
|
|
path.join(repoDir, 'ObjectiveC.h'),
|
|
'@interface ObjectiveC : NSObject\n@end\n',
|
|
);
|
|
await fs.writeFile(
|
|
path.join(repoDir, 'CoreFoundation.h'),
|
|
'#import <CoreFoundation/CoreFoundation.h>\nclass NativeHeader {};\n',
|
|
);
|
|
|
|
const classifications = await classifyContentLanguages(repoDir, [
|
|
'ObjectiveC.h',
|
|
'CoreFoundation.h',
|
|
'missing.h',
|
|
]);
|
|
|
|
expect([...classifications.entries()]).toEqual([
|
|
['ObjectiveC.h', SupportedLanguages.ObjectiveC],
|
|
['CoreFoundation.h', SupportedLanguages.CPlusPlus],
|
|
]);
|
|
expect(classifications.has('missing.h')).toBe(false);
|
|
expect(classifications.get('ObjectiveC.h')).not.toContain('@interface');
|
|
});
|
|
|
|
it('keeps TypeScript module extensions in the provider fallback map', () => {
|
|
expect(getLanguageForFileContent('service.mts', 'export class EsmService {}')).toBe(
|
|
SupportedLanguages.TypeScript,
|
|
);
|
|
expect(getLanguageForFileContent('service.cts', 'export class CjsService {}')).toBe(
|
|
SupportedLanguages.TypeScript,
|
|
);
|
|
});
|
|
|
|
it('parses Objective-C header snippets with the Objective-C language', () => {
|
|
expect(
|
|
getLanguageForFileContent('Worker.h', '@protocol Worker <NSObject>\n- (void)run;\n@end\n'),
|
|
).toBe(SupportedLanguages.ObjectiveC);
|
|
expect(getLanguageForFileContent('Worker.h', '- (void)run;\n')).toBe(
|
|
SupportedLanguages.ObjectiveC,
|
|
);
|
|
expect(getLanguageForFileContent('widget.h', 'class Widget { int value; };\n')).toBe(
|
|
SupportedLanguages.CPlusPlus,
|
|
);
|
|
});
|
|
|
|
it('keeps extensionless Ruby filenames when content classification misses', () => {
|
|
expect(getLanguageForFileContent('Rakefile', 'task :default do\nend\n')).toBe(
|
|
SupportedLanguages.Ruby,
|
|
);
|
|
expect(getLanguageForFileContent('Gemfile', 'source "https://rubygems.org"\n')).toBe(
|
|
SupportedLanguages.Ruby,
|
|
);
|
|
});
|
|
});
|