2012-10-11 4 views
6

대용량 프로젝트의 uses-clauses에 단위를 추가하는 것이 어렵 기 때문에 특정 종류의 코드 정리 및 리팩토링이 매우 어려워졌습니다.프로젝트의 모든 유닛의 uses 절에 단위를 추가합니까?

하나의 프로젝트에서 모든 delphi .pas 단위의 interface-uses-clause에 단위를 추가하고 싶습니다. 이는 500 개 이상의 장소에서 수동으로 수행하는 것을 의미합니다. 거대한 단위를 리팩토링하고 한 단위에서 두 단위로 나눌 때마다 "메모장 ++"와 같은 것을 사용하여 "MyOldUnit", "MyOldUnit, MyNewUnit"으로 검색하고 바꿀 수는 있지만 때로는 안전하지 않습니다. . 또한 "MyOldUnit"이 uses 절의 마지막 항목 인 경우 ("MyOldUnit 사용")가 누락됩니다.

어쨌든 파일을 검색하고 바꾸는 것은 위험한 일입니다. 그런 도구가 없다면 Castalia delphi 파서를 사용하여 하나의 도구를 작성하려고합니다. 저는 GExperts, Castalia, ModelMakerCodeExplorer를 확인했으며 프로젝트의 모든 uses 절에 단위를 일괄 적으로 삽입 할 수있는 방법이 없습니다. 나는 이것을하기위한 도구가 존재하기를 바라고 있습니다.

두 번째로, 많은 경우에, 하나의 유닛이 다른 유닛에 속하지 않는 함수를 옮기고 있는데, 이것은 그 유닛을 프로젝트 유닛의 30 %에 추가해야한다는 것을 의미합니다. 이미 추가 된 %. 즉, 정규식 접근 방식이 아니라 파서 방식이 필요합니다.

+2

가 (아주 오래된)있다'JclUsesWizard'는 JCL의 \ 전문가 \ useswizard는, 아마도 그것은 출발점으로 서비스를 제공 할 수있다. –

+0

이것을 수행하기 위해 실제 파서가 필요하지 않습니다. Perl이나 Python을 사용하는 정규식 기반 스크립트 또는 정규식 스크립팅에 대해 좋아하는 모든 것. 강력한 파서를 원한다면 실제 파서가 필요 하겠지만 원 코드 애플리케이션을 사용하면 코드베이스를 원할 경우 그렇지 않다. –

+4

아직 CnPack을 사용해 보셨습니까? – kobik

답변

3

우리 모두는 다른 프로젝트에서 확실히 사용할 코드를 작성했기 때문에. 한 유닛에서 다른 유닛으로 인터페이스 부품을 옮기면 프로젝트가 중단됩니다. 이전 유닛과 새로운 유닛과 동일합니다.

하지만 프로젝트를 중단하지 않고 리팩토링 할 수 있습니다. 부품 (단위, 클래스, 메소드, 프로 시저)을 더 이상 사용되지 않는 것으로 표시하십시오. 코드가 작동하지만 컴파일러가 경고합니다. 여기

다른 하나 개의 단위에서 절차를 이동하는 예 :

unit Foo; 

interface 

procedure FooProc; deprecated; // new location in unit FooNew 

implementation 

uses 
    FooNew; 

procedure FooProc; 
begin 
    FooNew.FooProc; 
end; 

end. 
+0

이것은 매우 실용적인 아이디어입니다. +1. –