CnPack Forum


 
Subject: 新的代码自动完成,好像有点问题,
3304xfq
普通灌水员
Rank: 2



UID 37244
Digest Posts 0
Credits 89
Posts 33
点点分 89
Reading Access 10
Registered 2008-2-11
Status Offline
Post at 2017-4-8 20:15  Profile | Blog | P.M. 
新的代码自动完成,好像有点问题,

具体从哪个版本开始不清楚,发现从支持模糊匹配后,才有的问题

1.
dateutils.xxx 这时,有些常量比如OneMinute,不管是前面加上dateutils.还是单独打one,都不会弹出OneMinute,或其它常量

2.system.Break或是其它时,函数是不带参数,的但是显示成Break(...),一下子真不习惯,搞的有参数似的

3.list.items[idx],这样的属性  会只显示list.itms,没有后面的索引信息, 也没有这个items类型信息了

4.不清楚是否这个版本开始,以前没注意
  假如代码定义了SystemMemory这个全局变量
  打入"System.dd",这时发现dd打错了,又忘了"dd"这个函数名,想让他自动完成列出函数来
  System.dd  这时在"M"位置.删除掉M重新打入M,会列出SystemMemory和其它system打头的变量
  再按后面的点号,企图列出所有system的项目,会变成强制自动完成"SystemMemory..dd"

5.begin end 匹配问题,以前修复过,但是后来又出现了, 具体不好问题重现,下次如果还发现,我记下来告诉你
  
正常小代码量时begin end是正常的

整个工程的代码一多,
prog xxx;
begin   //这里打回车,就会自动多出个end来
  
  xxxx
  xxxxx  这里仅几行代码,不多
   xxxx
end;

甚至 有时

prog xxx;
begin   //这里打回车,就会自动多出个end来
  //这里没有代码,只有一个空行,甚至空行都没有
end;


你不嫌累,就去看看上次修复begin/end前后有差异, 后面我有发现的话,告诉你


谢谢了,业余,能还这么坚持维护这份代码
Top
3304xfq
普通灌水员
Rank: 2



UID 37244
Digest Posts 0
Credits 89
Posts 33
点点分 89
Reading Access 10
Registered 2008-2-11
Status Offline
Post at 2017-4-8 20:37  Profile | Blog | P.M. 
补4
单独打入"System."时,也会变成"SystemMemory."
如果退格"system",这时再按点号,才正常弹出system下的东西
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6750
Posts 3551
点点分 6750
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2017-4-10 10:50  Profile | Blog | P.M. 
感谢详尽的报告。第五个问题请问是什么版本发现的?自动begin end配对高版本IDE已经有了,我们只做了低版本的。
Top
3304xfq
普通灌水员
Rank: 2



UID 37244
Digest Posts 0
Credits 89
Posts 33
点点分 89
Reading Access 10
Registered 2008-2-11
Status Offline
Post at 2017-4-10 12:00  Profile | Blog | P.M. 
5号问题,已经非常久了, 估计有1年左右了

只记的以前begin出问题,你修复过一次,好了,后来更新版本后,又出问题了
我遇到最多的还是
procedure
begin 打回车
  //这里还没写写代码,连空行都没有,
end;

或是
if xx=xx  /for xxx
begin  这里打回车,
  //这里还没写写代码,连空行都没有,
end;



但这种问题,我只发现,unit中代码多了以后,才有, 单独建个工程去测试,是正常的



另外,模糊匹配问题,以前人提了,你加上了, 现在好像默认是模糊状态的,建议把这个设成老风格, 感觉 js之类的人,才更习惯单词大写匹配
Top
3304xfq
普通灌水员
Rank: 2



UID 37244
Digest Posts 0
Credits 89
Posts 33
点点分 89
Reading Access 10
Registered 2008-2-11
Status Offline
Post at 2017-4-10 12:10  Profile | Blog | P.M. 
!!!!!发现一个begin/end的问题,  但不是唯一的,还有其它原因引起,!!!!!!

新建一个工程,上面放个按钮

procedure TForm1.Button1Click(Sender: TObject);
begin  //你在这里按回车!!
  if ZoomImageForm<>nil then
  begin   //你在这里打回车
    if Key=     //这里没写完
  end;
end;


这只是刚才发现一个,代码不完整时begin出错问题,  平常我遇到的都是代码完整的,只是想加点代码,就在begin那里打个回车,多了个end



补一下我的环境

万年Win7/万年D7/ cnpack:1.1.2.890 2017/03/02

其它IDE级包:
DDEvExtensions,Gexperts,delphispeedup
Top
npc8
灌水科科长
Rank: 3Rank: 3



UID 65881
Digest Posts 0
Credits 115
Posts 37
点点分 115
Reading Access 10
Registered 2011-5-26
Status Offline
Post at 2017-4-10 12:16  Profile | Blog | P.M. 
Top
3304xfq
普通灌水员
Rank: 2



UID 37244
Digest Posts 0
Credits 89
Posts 33
点点分 89
Reading Access 10
Registered 2008-2-11
Status Offline
Post at 2017-4-10 21:36  Profile | Blog | P.M. 
最近几版(小几个月内),感觉自动完成功能不太好,很多时候不能弹出来

1.后面代码有错,比如这个过程中,后面的代码没写完的
  procedure
begin
   dateutils.xxx  //后面有没写完的,很多时候,自动完成完全弹不出来,或是弹出来的是少的,甚至是错的
   a=b;
   c=d;
   e=  //没打完,想起来前面应该加东西,跳到dateutils那里想先把前面的写上,免的忘了....

end;

上面的,按理应该以行为单位解析,避免错误太多,代码完成功能,或是错误检查功能不能正常工作,这样 想修正,超累,纯人工


2.
procedure xxx;
begin
  //这里代码有错
end;

procedure yyy;
begin
   //这里会因为前面过程错误,害的后面不能自动完成功能
end;



3.
  uses
    xxxx,,,,xx;
   或是sysutils,windows,"不存在单元",dateutils;


这时,后面代码完成也会有大问题




上面的,只说老是遇到这样的问题,或是最近几个版本,和以前的,差异太大了,不是很好用
我并不保证说按上面的去实验,立马就问题重现;
Top
3304xfq
普通灌水员
Rank: 2



UID 37244
Digest Posts 0
Credits 89
Posts 33
点点分 89
Reading Access 10
Registered 2008-2-11
Status Offline
Post at 2017-4-11 13:19  Profile | Blog | P.M. 
继续吐嘈:

多语言的,默认会读取程序目录下txt文件, 如果某个文件读取失败,连程序都没办法启动了,直接崩溃干净
我在程序目录下,有一个"更新服务器说明.txt",程序在繁体下运行时,显示成下面的文件名

这时,CnCustomLangFileStorage会去遍历txt文件,然后报EFOpenError错误,然后就没然后了
所以,你内部读取时,建议加上try except end吧,避免万一某个文件不能读,或是被其它程序占用着

因为是控件创建时的代码, 除非改控件代码,或是删掉有问题的文件,不然外部代码一点办法都没
不能发图,复制了CallStack窗口内容给你看

"Call Stack"
TFileStream.Create('F:\temp\VideoSudio2\更新服?器?明.txt',32,0)
TFileStream.Create('F:\temp\VideoSudio2\更新服?器?明.txt',32)
TCnWideStringList.LoadFromFile('F:\temp\VideoSudio2\更新服?器?明.txt')
TCnCustomHashLangStorage.DoLoadFile('F:\temp\VideoSudio2\更新服?器?明.txt',$2595050)
TCnCustomHashLangStorage.IsLanguageFile(???)
TCnCustomLangFileStorage.InternalInit
TCnCustomLangFileStorage.SetStorageMode(???)
SetOrdProp(???,???,???)
TReader.ReadProperty($25056A0)
TReader.ReadDataInner($25056A0)
TReader.ReadData($25056A0)
TComponent.ReadState($2533B80)
TReader.ReadComponent(nil)
TReader.ReadDataInner($253AEB0)
TReader.ReadData($253AEB0)
TComponent.ReadState($2533B80)
TDataModule.ReadState($2533B80)
TReader.ReadRootComponent($253AEB0)
TStream.ReadComponent($253AEB0)
InternalReadComponentRes('TDataModule1',4194304,$253AEB0)
InitComponent(TDataModule1)
InitInheritedComponent($253AEB0,TDataModule)
TDataModule.Create()
Top
3304xfq
普通灌水员
Rank: 2



UID 37244
Digest Posts 0
Credits 89
Posts 33
点点分 89
Reading Access 10
Registered 2008-2-11
Status Offline
Post at 2017-4-11 13:37  Profile | Blog | P.M. 
修正

查了代码你已经在外部加了try exceptend了,  不过,win下单独,或是iDE运行,还是崩溃掉了


好像是   delphi7.1 classes.pas 6351行
procedure TReader.ReadProperty(AInstance: TPersistent);
raise EReadError.CreateResFmt(@SPropertyException, [Name, DotSep, PropPath, E.Message]);  这里把文件名放到错误消息里,蹦掉了


测试方法
新建工程,放上

CnLangManager1
CnHashLangFileStorage1
CnLangTranslator1
三控件

CnHashLangFileStorage1的FStorageMode = smByFile

在程序目录下,建"更新服务器说明.txt" 内容无所谓  (其它文件名也行,只要这个文件名在其它语言下,显示有?的就行

然后在另一电脑上,共享目录中(或是在vmware中映射成本地盘符)运行程序

这时,
CnHashLangFileStorage1不管怎么设置,控件创建,初始化时,都会去优先用户代码,去检测程序当前目录中的txt文件


只要有文件名是"xxx?xxx.txt"的, 这个exe崩溃,不管单独运行,还是delphi中运行



建议改进读初始化文件,由用户选择是否自动化读取
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6750
Posts 3551
点点分 6750
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2017-4-13 17:03  Profile | Blog | P.M. 
我在IsLanguageFile的判断里,针对DoLoadFile加了异常捕捉,读取文件失败时这里会判断为非语言文件,从而不加载此条目。github上的代码已更新。
Top
3304xfq
普通灌水员
Rank: 2



UID 37244
Digest Posts 0
Credits 89
Posts 33
点点分 89
Reading Access 10
Registered 2008-2-11
Status Offline
Post at 2017-4-15 10:24  Profile | Blog | P.M. 
我更关心的是,代码自动完成功能,什么时候恢复成老样子, 半年或一年前那时候的方便性
Top
3304xfq
普通灌水员
Rank: 2



UID 37244
Digest Posts 0
Credits 89
Posts 33
点点分 89
Reading Access 10
Registered 2008-2-11
Status Offline
Post at 2017-4-20 21:30  Profile | Blog | P.M. 
叔啊,一个星期了,倒不是追着你把这个问题解决掉,晚点也没事, 只是你表个态啊,改不改掉这些问题啊
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6750
Posts 3551
点点分 6750
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2017-4-21 15:43  Profile | Blog | P.M. 
实在太忙,还没空查。
Top
3304xfq
普通灌水员
Rank: 2



UID 37244
Digest Posts 0
Credits 89
Posts 33
点点分 89
Reading Access 10
Registered 2008-2-11
Status Offline
Post at 2017-4-21 17:08  Profile | Blog | P.M. 
还以为被抛弃了,,,,嗯.....我说的是问题
Top
3304xfq
普通灌水员
Rank: 2



UID 37244
Digest Posts 0
Credits 89
Posts 33
点点分 89
Reading Access 10
Registered 2008-2-11
Status Offline
Post at 2017-5-6 06:30  Profile | Blog | P.M. 
一个月了,只好来催了,5月发的每日构建(2017-05-03),都没有处理上面问题

另外,补充个问题,不知道你能不能解决,或是不知道是不是插件引起的错误
(我装了cnpack,delphispeed,gexperts,ddevextensons ,Delphi7.1)

假如,代码原先是从while中的有Continue或是break,整个代码块拷出到if下面
例:

while true do
begin
if dateutils.HourOf(now)=1 then
break;
if dateutils.HourOf(now)=2 then
Continue;

break
end;

while用的不爽,改成if了,代码块直接复制到if里面

if true then
begin
if dateutils.HourOf(now)=1 then
break;   //明显这里不是支持这个的
if dateutils.HourOf(now)=2 then
Continue;   //明显这里不是支持这个的

end;


这样.编译时,代码少时,能够提示不是loop不允许用break.contiune,但代码多了会报内部错误的
不知道是插件装多了,还是其它什么原因,感觉N年前没遇到,最近1-2年遇到的次数多了些
代码多了,报内部错误,会郁闷很久,才发现是自己忘了改掉break.contiune



另外cnpack 2017-5-3不知道是不是心理作用,感觉代码完成功能,好像速度快了一些,快N些
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6750
Posts 3551
点点分 6750
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2017-5-8 10:34  Profile | Blog | P.M. 
顶楼的第四个问题,可能是我们退格删除点号时没能重新获取列表导致的 ,目前已改成退格删除点号时让列表隐藏。
但按点号时应该会输入当前选中的条目并在后面加个点,不太清楚SystemMemory..dd这样是怎么来的,如果有可能,能否帮录个桌面操作视频让我理解一下?

其实好多问题我还没能彻底理解……
Top
 




All times are GMT++8, the time now is 2024-3-29 04:29

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.0.0  © 2001-2006 Comsenz Inc.
Processed in 0.007243 second(s), 7 queries , Gzip enabled

Clear Cookies - Contact Us - CnPack Website - Archiver - WAP